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

南京网站排名百度风云榜各年度小说排行榜

南京网站排名,百度风云榜各年度小说排行榜,山西省住房和建设厅网站首页,做 耽美小说下载网站有哪些文章目录 前言一、从链式调用说起二、数据抽象三、数据、对象的反对称性四、得墨忒尔律五、数据传送对象总结 前言 代码整洁之道读书随笔,第六章 一、从链式调用说起 面向对象语言中常用的一种调用形式,链式调用,是一种较受推崇的编码风格&…

文章目录

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


前言

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


一、从链式调用说起

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

例如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.yidumall.com/news/70761.html

相关文章:

  • 安徽省建设厅网站域名网址收录大全
  • 网站建设什么是静态网页seo网站优化推广
  • 深圳好的网站建设公司哪家好推广宣传方式有哪些
  • 网站做三层结构渠道网官网
  • 做网站需要的电脑配置广州宣布5条优化措施
  • 学网站开发要下载哪些软件购买链接平台
  • 正规的网站建设专业公司seo是什么意思 为什么要做seo
  • 做企业网站的多少钱友情链接联盟
  • 做网站签到挣钱吗安徽seo优化规则
  • 常州营销型网站建设百度竞价最低点击一次多少钱
  • 网站建实例百度趋势搜索大数据
  • 网站建设文件名整站seo免费咨询
  • 如何建单位网站加强服务保障满足群众急需i
  • 做企业网站用什么字体2022百度指数排名
  • wordpress菜单子菜单宁波seo推广优化怎么做
  • 电商网站的推广方式什么叫关键词举例
  • 鹰潭城乡建设局的网站网上的推广
  • 创世网络网站建设网店推广平台
  • 无锡网站建设电话百度公司全称叫什么
  • 公司静态网站模板下载品牌推广策划书范文案例
  • 有哪些看设计做品的网站十堰seo
  • 建设电影网站怎么上传电影新网域名
  • 腾冲网站建设房地产销售工作内容
  • 公司开发网站建设价格百度收录的网站多久更新一次
  • 大连网站的建设专业seo网站优化推广排名教程
  • 怎么做劳务公司网站旺道seo推广效果怎么样
  • wordpress json api 插件搜索引擎优化seo专员
  • 广西外贸app优化seo厂家
  • 东莞建设工程检测中心网站搜索引擎付费推广
  • p2p网站开发文档深圳网站建设服务