论坛首页 Java企业应用论坛

代码分层、分模块的好处

浏览 5846 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-09-28   最后修改:2011-09-28
OO
   第一条,也是最根本的一条:抽象出了代码的整体框架、脉络,同时也隔离了具体的变化。没有分层,把逻辑都写在一个方法里面的代码就好比是一本没有目录的电子书,要找哪一章哪一节全得凭感觉,得点进去看,得结合上下文来分析。
   良好的代码层次结构则相当于给这电子书创建了目录,而且按住Ctrl+鼠标就能点进去。它可以让维护人员迅速地掌握代码的整体架构,因为它把功能点都显式地列出来并很好地组织在一起了。要维护代码首先就得理解它,因此从维护的角度讲,分层极有必要。
   一本书的目录是不会经常变的。这就相当于抽象出了代码的整体架构,一盘散沙、群龙无首的局面宣告结束;比较抽象的说法是:固定出了不变的部分;可不是么,整体架构是随随便便就能换的吗?假如这本书是一份系统说明文档的话,它的具体内容可能会经常变,比如某处出现了排版错误、或是错别字,或是描述欠妥当;但改完之后目录一般是不用变的,变的只是具体的内容。代码在这方面更彻底,无论具体内容怎么变,整体架构都是不用变的;这就是隔离了具体的变化,它影响不了上层的抽象结构。
   在这里,系统分层、分模块体现的是依赖倒置原则:目录的各层级永远都只是提纲挈领性的抽象描述,具体内容要点进去才知道。即使这个目录下的内容再少,哪怕就一句话,也要想办法用一个更高层次的概念来概括它,而绝不能直接把它做为目录。道理显而易见,具体的东西是经常变化的,抽象的才能固定下来。依赖倒置原则的作用就在于固定不变逻辑,隔离变化逻辑。
   而对于代码而言,狭义上的抽象指的仅仅是抽象类、接口,实际上,即使把代码重构为一个private方法也可以看成是一种抽象。代码此时也有一个从具体到抽象的嬗变,这个私有方法也可以看成是“目录”。另外所谓ioc也可以看作是依赖导致原则的一个体现,高层依赖的只能是抽象类、接口或普通父类,否则ioc便没有意义;它的优势是在解耦方面做得更彻底,在代码层面上彻底消除了调用者对具体实现类的依赖。
   第二条,有利于代码复用。假如要复用某段逻辑,前提就是要把它单独作为一个模块封装出来;显然,铁板一块的代码无法使其任何一个子逻辑被复用。这也要求模块的封装非常彻底,不能与其他模块过多地耦合,否则就不能“一处定义到处使用”。
   代码的合理封装是这一切的基础。只有封装才能产生层次结构,进而实现固定不变隔离变化,也只有封装才能实现代码复用。
   个人经验之谈,不足之处请不吝赐教。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics