zoukankan      html  css  js  c++  java
  • 高内聚 低耦合

    在看三范式的过程中,看到到高内聚,低耦合这个原则。

    高内聚是说模块内部要高度聚合,低耦合是说模块与模块之间的耦合度要尽量低。前者说的是模块内部的关系,后者说的是模块与模块之间的关系。

    看似不同,实又相关,比较有意思。

    高内聚、低耦合关系

    一个数据库设计的例子;

    ① 对于公司来说,要了解一个员工的信息,要知道其所属部门和分公司,那么,内聚的结果是将【员工姓名、单位名称、分公司名称】放在一个二维表中。

    ② 如此一来,数据极度耦合,增删不便,比如删掉一个员工,会将分公司也删除。故而,数据库将员工信息和部门信息分开存储,降低内聚,产生耦合,但是使用方便。

    ③ 极致角度考虑,单位名称和分公司名称也会导致内部不够,增删不便,但是如果在分出一个分公司表,将导致查看员工信息时,所要查看的二维表数量太大,也就是高度聚合,高度耦合。

    结合实际使用,很少会出现将所有的一个分公司下面的部门都删除,导致分公司被删除的情况,同时,添加机构信息也是有限的工作量,但是查看员工信息确实现实中随时存在的,一般来说,数据库设计都是到②阶段截止。

    也就是说,如果想要模块内聚性达到最高,那就应该在模块中放单一的功能,没有与其他模块关联,这样将会导致这个模块高度的依赖外部模块,产生极大的耦合。

    但是如果模块之间没有相互依赖,每个模块都能独立实现功能,那么这个模块的内聚性也会不好。

    高内聚耦合思想的本身,带有一定的平衡性质,他在追求提高内聚的同时降低耦合,达到一种最佳的平衡状态。

    耦合

    耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。

    耦合性分类(低-高): 无直接耦合、数据耦合、标记耦合、控制耦合、公共耦合、内容耦合

    ① 无直接耦合

    ② 数据耦合:指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递

    ③ 标记耦合:指两个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址

    ④ 控制耦合:指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能;

    ⑤ 公共耦合:指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。

    ⑥ 内容耦合::这是最高程度的耦合,也是最差的耦合。当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。

    内聚

    内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。

    内聚性分类(低-高):偶然内聚、逻辑内聚、时间内聚、通信内聚、顺序内聚、功能内聚;

    ① 偶然内聚:指一个模块内的各处理元素之间没有任何联系

    ② 逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能

    ③ 时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块

    ④ 通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据

    ⑤ 顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入

    ⑥ 功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块的耦合是最弱的。


    什么是高内聚、低耦合:https://www.cnblogs.com/robnetcn/archive/2012/04/15/2449008.html

  • 相关阅读:
    初识python 2.x与3.x 区别
    装饰器
    函数的进阶
    Spring Boot启动问题:Cannot determine embedded database driver class for database type NONE
    22.Spring Cloud Config安全保护
    23.Spring Cloud Bus 无法更新问题(踩坑) Spring cloud config server Could not fetch remote for master remote
    24.Spring Cloud之Spring Cloud Config及Spring Cloud Bus
    Spring Boot整合Spring Data Elasticsearch 踩坑
    项目中Spring Security 整合Spring Session实现记住我功能
    32.再谈SpringBoot文件上传
  • 原文地址:https://www.cnblogs.com/wangrui1587165/p/10069571.html
Copyright © 2011-2022 走看看