当前位置: 首页 > news >正文

南宁国贸网站建设东莞网站开发公司

南宁国贸网站建设,东莞网站开发公司,wordpress仿异次元,网线水晶头的接线方法文章目录 前言一、从链式调用说起二、数据抽象三、数据、对象的反对称性四、得墨忒尔律五、数据传送对象总结 前言 代码整洁之道读书随笔,第六章 一、从链式调用说起 面向对象语言中常用的一种调用形式,链式调用,是一种较受推崇的编码风格&…

文章目录

  • 前言
  • 一、从链式调用说起
  • 二、数据抽象
  • 三、数据、对象的反对称性
  • 四、得墨忒尔律
  • 五、数据传送对象
  • 总结


前言

代码整洁之道读书随笔,第六章


一、从链式调用说起

面向对象语言中常用的一种调用形式,链式调用,是一种较受推崇的编码风格,如果你调用一个实例的方法,修改了实例的状态,后续需要调用其他方法,进一步改变实例的状态,那么不需要每次都用变量接收返回值,直接链式调用即可。

例如gorm的更新可以这样实现。

result := m.tx.Model(&model.A{}).Where(&model.A{ID: id}).Updates(data)

其中Where的实现为:

// Where return a new relation, filter records with given conditions, accepts `map`, `struct` or `string` as conditions, refer http://jinzhu.github.io/gorm/crud.html#query
func (s *DB) Where(query interface{}, args ...interface{}) *DB {return s.clone().search.Where(query, args...).db
}

二、数据抽象

Java的初级程序员,此处特指刚入行时的本人,喜欢为类的私有成员变量加getter/setter,在很多crud场景,其实也感觉不出有什么问题,直到你的业务场景不再满足简单的crud,例如,书中的示例中给出了一个笛卡尔平面上一个point类的实现。刚好我现在的工作就是为智能机器人做路径规划,所以对这个感触就比较深。
一个点包含X/Y轴,每次改变位置,我们不能只更新单个轴,而是要同时更新,同样,查询也不是只想查询到单个轴,那么分别为每个变量加getter/setter是没有意义的。
getter/setter的根本目的是为了隐藏实现,隐藏实现是为了让用户无需了解实现就可以操作数据本体。

三、数据、对象的反对称性

对象和数据结构之间的二分原理:

过程式代码(使用数据结构的代码)便于在不改动既有数据结构的前提下添加新函数;面向对象代码便于在不改动既有函数的前提下添加新类。
反过来:
过程式代码难以添加新数据结构,因为必须修改所有函数;面向对象代码难以添加新函数,因为必须修改所有类。

那么我们可以举例,对于机器人,如果要构造一个类,那么就可以考虑,如果你的抽象级别在机器人上,每个机器人有自己的行为,比如a类机器人是聊天机器人,b类机器人是扫地机器人,那么就做面向对象,你不需要每次增加新功能都为所有机器人增加新函数。
但是如果你们机器人都是扫地机器人,那么把能力进行抽象就是比较正确的选择,走路的能力抽象成接口,让机器人组合能力,对于走路这个能力就成了过程式代码,就算你需要增加新的机器人种类,只需要包含这种能力即可。

四、得墨忒尔律

模块不应了解它所操作对象的内部情形。

更准确的,类C的方法f只应该调用以下对象的方法。

  • C;
  • 由f创建的对象;
  • 作为参数传递给f的对象;
  • 由C的实体变量持有的对象。

书中给出了一个反例:

final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();

现在和开头我说的链式调用比较一下,链式调用的每次调用返回的都是类C的实例本身,那么是没有违背得墨忒尔律的,但是这个反例中,每次返回的都是不一样的对象,那么对于调用者就需要了解Options、ScratchDir的内部构造结构。

特别需要指出,这里Options、ScratchDir特指拥有行为的对象,如果他们只拥有变量,而不拥有行为,那么作者认为不需要考虑得墨忒尔律。
结合outputDir的使用:

String outFile = outputDir + "/" + className.replace('.', '/') + ".class";
FileOutputStream fout = new FileOutputStream(outFile);
BufferedOutputStream bos = new BufferedOutputStream(fout);

作者给出了修正结果:

BufferedOutputStream bos = ctxt.createScratchFileStream(classFileName);

把过程隐藏到createScratchFileStream() 中,对于调用者,就不需要了解过多类的细节。

五、数据传送对象

数据传送对象(Data Transfer Objects, DTO)是用于与数据库通信或解析套接字传递的消息等场景中的数据结构,不适合加入业务逻辑。Active Record1是一种特殊的DTO。


总结

这是代码整洁之道第六章的读书随笔,本章已完结。


  1. Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。 ↩︎

http://www.hkea.cn/news/799444/

相关文章:

  • 网站做付费推广都需要问什么网络热词2022
  • 给男票做网站表白的软件产品市场推广计划书
  • 西安网站制作定制怎么制作自己的个人网站
  • wordpress 如何移动端盐城seo优化
  • asp.net 制作网站开发百度竞价排名软件
  • 百度爱采购推广平台天津网络推广seo
  • 福州市闽侯县建设局网站推广引流吸引人的文案
  • wordpress目录 读写权限泰安短视频seo
  • 东莞建设网站流程澎湃新闻
  • 萧县住房和城乡建设局网站seo排名推广工具
  • 企业网站php模板下载百度百科官网首页
  • 做愛視頻网站在线网页制作网站
  • 织梦pc怎么做手机网站搜索引擎优化的基础是什么
  • 课程建设网站设计源码爱站网反链查询
  • 安徽省建设业协会网站个人网页制作教程
  • 好的摄影网站推荐福州seo顾问
  • html做的好看的网站如何宣传推广产品
  • 微信手机网站制作怎么引流客源最好的方法
  • 宿州建设网站公司前端seo搜索引擎优化
  • 做王境泽表情的网站百度seo关键词优化排名
  • 怎么选择无锡网站建设虚拟主机搭建网站
  • 做原油期货关注什么网站搜索引擎优化是做什么
  • 微信小程序怎么制作游戏安卓优化清理大师
  • 胶南做网站初学者做电商怎么入手
  • 网站为什么要维护佛山网络营销推广
  • 国企网站建设报告怎么建造自己的网站
  • 免费做司考真题的网站余姚网站如何进行优化
  • 如何网站开发1688网站
  • 丽水专业网站建设价格青岛网站优化
  • 网站开发专业培训学校百度推广登录官网入口