《代码整洁之道》——(5)对象和数据结构
《代码整洁之道》——(5)对象和数据结构
5.1、数据抽象
隐藏实现并非只是在变量之间放上一个函数层简单。隐藏实现关乎抽象!类并不简单的用取值器和赋值器将其变量推向外间,而是曝露抽象接口,以便用户无需了解数据的实现就能操作数据实体。
我们不愿曝露数据细节,更愿意以抽象形态表述数据。这并不只是用接口和/或赋值器、取值器就万事大吉。要以最好的方式呈现某个对象包含的数据,需要做严肃的思考。傻乐着乱加取值器和赋值器,是最坏
的选择。
5.2、数据、对象的反对称性
对象把数据隐藏于抽象之后,曝露操作数据的函数。数据结构曝露其数据结构,没有提供有意义的函数。
过程式代码(使用数据结构的代码)便于在不改动既有数据结构的前提下添加新函数,面向对象代码便于在不改动既有函数的前提下添加新类。
5.3、得墨忒耳律
著名的得墨忒耳律认为,模块不应了解它所操作对象的内部情况。得墨忒耳律认为,类C的方法f只应该调用以下对象的方法:
- C
- 由f创建的对象
- 作为参数传递给f的对象
- 由C的实体变量持有的对象
方法不应调用由任何函数返回对象的方法。
5.3.1、火车失事
final String outputDir = ctxt.getOptions().getSractchDir().getAbsolutePath()
这类代码常被称作火车失事,因为它看起来就像是一列火车。这类连串的调用通常被认为是肮脏的风格,应该避免。最好做类似如下的切分:
Options opts = ctxt.getOptions();
File scratchDir = opts.getScratchDir();
final String outputDir = scratchDir.getAbsolutePath();
这些代码是否违反得墨忒耳律,取决于ctxt、Options和ScratchDir是对象还是数据结构。如果是对象,则它们的内部结构应当隐藏而不曝露,而有关其内部细节的知识就明显违反了得墨忒耳律。如果ctxt、Options和ScratchDir只是数据结构,没有任何行为,则它们自然会曝露其内部结构,得墨忒耳律也就不适用了。
5.3.2、混杂
这种混淆有时会不幸导致混合结构,一半是对象,一般是数据结构。这种结构拥有执行操作的函数,也有公共变量或公共访问器及改值器。无论出于怎样的初衷,公共访问器及改值器都把私有变量公开化,
诱导外部函数以过程式程序使用数据结构的方式使用这些变量。
此类混杂增加了添加新函数的难度,也增加了添加新数据结构的难度,两面不讨好。应该避免创造这种结构。它们的出现,展示了一种乱七八糟的设计,其作者不确定——或者更糟糕,完全无视——他们是否
需要函数或类型保护。
5.3.3、隐藏结构
假使ctxt、Options和ScratchDir是拥有真实行为的对象,由于对象应隐藏其内部结构,我们就不该能够看到内部结构。
5.4、数据传送对象
最为精炼的数据结构,是一个只有公共变量、没有函数的类。这种数据结构有时被称为数据传送对象,或DTO。DTO是非常有用的结构,尤其是在与数据库通信、或解析套接字传递的消息之类场景中。
《代码整洁之道》——(5)对象和数据结构相关推荐
- 重读【代码整洁之道】
一.前言 [代码整洁之道]很经典,但也有些过时,翻译上也有些啰嗦,但总体上是好书.通过对本书核心内容的摘抄,结合自己的经验,整理了一些精简的点,这样你就省的去啃那本400多页的书了. 软件质量 = 架 ...
- 2015年第11本:代码整洁之道Clean Code
前一段时间一直在看英文小说,在读到<Before I fall>这本书时,读了40%多实在看不下去了,受不了美国人啰啰嗦嗦的写作风格,还是读IT专业书吧. 从5月9日开始看<代码整洁 ...
- 《代码整洁之道 Clean Architecture》-读书笔记
大家好,我是烤鸭: 关于<代码整洁之道>,记录一下读书笔记. 代码整洁之道 第一章 整洁代码 整洁代码的艺术 第二章 有意义的命名 避免误导 有意义的区分 使用读得出来和可搜索的名字 避免 ...
- [读书笔记] 代码整洁之道
书的示例是Java语言编写的,虽说不会影响阅读,但是后面几章讲应用这套方法论的时候,大篇幅的Java代码分析还是挺难受的,而且连java测试框架Junit都要细讲,对于非Java系的开发者来说,一些内 ...
- 【苦练基本功】代码整洁之道 pt2(第4章-第6章)
代码整洁之道 pt2(第4章-第6章) 4 注释 4.1 注释不能美化糟糕的代码 4.2 用代码来阐述 4.3 好注释 4.3.1 法律信息 4.3.2 提供信息的注释 4.3.3 对意图的解释 4. ...
- 浪漫主义计算机科学家的真知灼见——《代码整洁之道》
熟悉我的人都知道我每次写文章都要敬从当涂太白墓请来的李白三杯酒,很多人问我为什么写文章之前不拜韩愈或者苏轼反而拜成就在诗不在文的李白呢?我每次都要解释:李白是捞月的诗人,Monkey是捞月的动物,李白 ...
- 代码整洁之道 Clean Code 读书笔记
目录 代码整洁之道 Clean Code 第一章 整洁代码 第二 三章 命名与函数 第四 五章注释与格式 第六章 对象和数据结构 第七章 错误处理 第八章 边界 第九章 单元测试 第十章 类 第十一章 ...
- 《代码整洁之道》目录—导读
版权声明 代码整洁之道 Authorized translation from the English language edition, entitled Clean Code: A Handboo ...
- 代码整洁之道(上篇)
目录 整洁代码重要性 有意义的命名 函数 注释 格式 对象和数据结构 错误处理 边界 单元测试 类 系统 迭进 总结 推荐一本书:罗伯特 C. 马丁的<代码整洁之道>. 组内最近在强调研发 ...
最新文章
- rsync文件同步的两种方式——ssh协议和守护进程(端口873)
- mysql数据库从删库到跑路之mysql完整性约束
- 【转】构造函数的执行序列
- 新手入门深度学习 | 2-3:文本数据建模流程示例
- IM的扫码登录功能如何实现?一文搞懂主流的扫码登录技术原理
- RxJs combineLatest Operator 的数组用法
- list 转 json,以及 json 解析
- 20200113每日一句
- WPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanel
- 计算1~20阶乘的和
- 2021CCPC网络预选赛(重赛)
- 用户需求和产品需求的采集、分析、筛选和管理
- MACS磁珠标记细胞分选技术
- laravel配置语言包,实现网站中英文切换
- GPU的发展史,GPU与CPU的关系是什么?为何现在GPU越来越重要?
- ubuntu | 命令行中输出文件夹下的文件+输出某个后缀的文件+文件名作为参数运行py脚本
- 机器人正运动学DH参数表示法
- 进位计数制及其相互转换
- 利用freemarker模板导出复杂excel可带图片
- 性格测试小软件有哪些,十个有趣的性格小测试 测试你是什么性格