软件设计原则之迪米特法则
2022-10-02 本文已影响0人
GuangHui
- 每个单元对其它单元只拥有有限的知识,而且这些单元是与当前单元有紧密联系的;
- 每个单元只能与其朋友交谈,不与陌生人交谈;
- 只与自己最直接的朋友交谈。
这个原则需要我们思考,哪些算是直接的朋友,哪些算是陌生人。火车残骸般的代码显然就是没有考虑这些问题而直接写出来的代码。
或许你会说,按照迪米特法则这样写代码,会不会让代码里有太多简单封装的函数?
确实有可能,不过,这也是单独解决这一个坏味道可能带来的结果。正如我前面所说,这种代码的出现,根本的问题是缺乏对封装的理解。
一个好的封装是需要基于行为的,所以,如果把视角再提升一个角度,我们应该考虑的问题是类应该提供哪些行为,而非简简单单地把数据换一种形式呈现出来。
最后,还有一个问题我要提醒你一下。有些内部 DSL 的表现形式也是连续的函数调用,但 DSL 是声明性的,是在说做什么(What),而这里的坏味道是在说怎么做(How),二者的抽象级别是不同的,不要混在一起。