苏州网站建设推荐好先生科技,市北区小型网页设计培训,苏州网站建设一站通,优秀的企业网站文章目录 前言一、从链式调用说起二、数据抽象三、数据、对象的反对称性四、得墨忒尔律五、数据传送对象总结 前言
代码整洁之道读书随笔#xff0c;第六章 一、从链式调用说起
面向对象语言中常用的一种调用形式#xff0c;链式调用#xff0c;是一种较受推崇的编码风格第六章 一、从链式调用说起
面向对象语言中常用的一种调用形式链式调用是一种较受推崇的编码风格如果你调用一个实例的方法修改了实例的状态后续需要调用其他方法进一步改变实例的状态那么不需要每次都用变量接收返回值直接链式调用即可。
例如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。 总结
这是代码整洁之道第六章的读书随笔本章已完结。 Active Record(活动记录)是一种领域模型模式特点是一个模型类对应关系型数据库中的一个表而模型类的一个实例对应表中的一行记录。 ↩︎