码迷,mamicode.com
首页 > 其他好文 > 详细

[第八章]一、设计原则

时间:2018-03-01 17:08:47      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:工具   str   类别   class   鼠标   log   时间   bsp   原因   

【内聚】

1.内聚的定义

    一个模块内部元素彼此结合的紧密程度。其中关键字:模块、元素、结合

    模块:大到子系统,小到一个函数,都可以看成一个模块

    元素:

           模块:包、命名空间等

           包:类、接口、全局数据等

           类/接口:方法、属性

           函数:内部的代码

  结合: 用“凝聚力”来理解,更贴切。

        假如说一个类的方法,都依赖于类自身的其他方法,我们说它内聚高。如果一个类的方法依赖外部类的方法,那么这个类的内聚性一定不高吗?不一定。判断一个模块内部元素的内聚性是否高,要看这个模块内部元素的凝聚力。什么是凝聚力?凝聚力就是对模块本身职责的专注程度。

         例如:操作数据库的CURD类。CURD方法之间没有任何结合的关系。但这四个方法是高内聚的。因为它们都专注于CURD类本身的职责。

2.内聚的分类

        偶然内聚:是内聚性最差的一种。仅仅是因为某个和本身业务无关的原因而划分到同一个模块中。例如最常见的,Utils包。这个包主要是提供一些常用的小工具,像个百宝箱一样。这种包中的各个功能模块、各个类专注的职责都是独立的,仅是为了方便取用而划分到了一起。

        逻辑内聚:模块内的元素属于同一个比较宽泛的类别,但元素的职责上可能不一样。例如:鼠标、键盘、显示器、打印机,都同属于IO设备,但这样的内聚相对还是比较弱的。鼠标、键盘归类为输入设备模块,显示器、打印机归类为输出设备模块。这样,内聚性会更高一点。

        时间内聚:这种内聚一般在函数中比较常见。模块内的元素之所以被划分到一个模块内,是因为这些元素的动作在时间上很相近。或者说在某一事件发生、某一状态改变时会调用这些元素进行业务处理。例如:异常处理。抛出异常后,一般我们要做释放资源、记录日志、通知用户这些动作都要执行。

        过程内聚:这种内聚一般在函数中比较常见。这类元素一般是在处理某个业务操作时,必须按照一定的顺序来执行。例如:读/写文件操作。1.判断文件是否存在,2文件是否有权限,3打开文件,4读/写文件。以上这4步的函数都是为了完成读/写文件这一个操作,并且顺序不能错乱。那么把这4个函数封装在一个函数中,那么它们之间就是过程内聚。

        信息内聚:

        顺序内聚:

        功能内聚:

[第八章]一、设计原则

标签:工具   str   类别   class   鼠标   log   时间   bsp   原因   

原文地址:https://www.cnblogs.com/mysic/p/8487566.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!