《Clean Code代码整洁之道》第六章 对象和数据结构(下)

得墨忒耳律
著名的得墨忒耳律认为
模块不应了解它所操作对象的内部情形。这意味着对象不应该通过存取器曝露其内部结构,因为这样更像是曝露而非隐藏其内部结构。
火车失事
final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
这类代码常被称作是火车失事,因为它看起来就像是一列火车,这类连串的调用通常被认为是肮脏的风格。最好做一下区分
像这样:
Options opts = ctxt.getOptions();
File scratchDir = opts.getScratchDir();
final String outputDir = scratchDir.getAbsolutePath();

混杂
final String outputDir = ctxt.options.scratchDir.absolutePath;
这种混jiao有时会不幸导致混合结构,一半是对象,一半是数据结构,这种结构拥有执行操作的函数,也有公共变量或公共访问器及改值器。无论出于怎样的初衷,公共访问器及改值器都把私有变量公开化,诱导外部函数以过程式程序使用数据结构的方式使用这些变量。
数据传送对象(DTO)

  • 最为精炼的数据结构,是一个只有公共变量、没有函数的类。
  • Active Record是一种特殊的DTO形式,它们拥有公共变量的数据结构,但通常也会拥有类似save和find这样的可浏览的方法。
  • Active Record一般是对数据库表或其他数据源的直接翻译

小结

  • 对象曝露行为,隐藏数据。便于添加新对象类型而无需修改既有行为,同时也难以在既有对象中添加新行为
  • 数据结构曝露数据,没有明显的行为,便于向既有数据结构添加新行为,同时也难以向既有函数添加新数据结构
    -113

你可能感兴趣的:(《Clean Code代码整洁之道》第六章 对象和数据结构(下))