高内聚低耦合之我见

我们再来说内聚性:
  内聚表示一个模块内部元素的内聚性,也就是元素的凝聚力,是否每个元素的存在都是为了实现该模块的职责。在维基上面有很多内聚分类,但是那些都是针对不同内聚方式的总结,我们在设计过程中 我认为应该遵循 原子性 组合 分类三个步骤来设计,原子性 简单说 就是一个元素应该只实现一个功能,然后使用组合方式来组合多个元素以完成更加复杂的功能,最后就是不同元素的空间上面的归类,主要有逻辑归类,功能归类,数据归类,过程归类,顺序归类,时间归类等等,选择不同的归类方式进行归类即可。

  内聚其实是很好进行内聚的,因为在不考虑不同模块之间的沟通的情况下,我们都可以很好的设计出高内聚的模块,但是一旦考虑到耦合情况,在不熟悉耦合手段的情况下,我们很可能为了耦合而牺牲了内聚性,所以 合适的耦合手段是保证高内聚的必备方案。


  消息耦合:各个模块只有一个消息处理接口,消息总线提供消息的订阅和分发,各个模块会向消息总线注册自己感兴趣的消息。但是这适合项目的整体架构的情况下采用的耦合方案
  数据耦合: 指两个对象之间传递的是数据结构,通常用于对象之间的相互调用,但是仅仅传递简单的值类型
  标记耦合:两个模块之间约定数据结构的通信机制,通常用于兄弟模块之间的通信,通常用于 具有先后顺序的模块之间的简单沟通,比如在A模块打开了B模块,然后B模块操作了数据,最终将数据返回给A模块,
  公共耦合:两个模块依赖于共同的父元素的约束,通常用于父子结构
  控制耦合:指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),通常用于开关模式
  外部耦合:模块都依赖全局的唯一简单变量,与公共耦合的区别在于一个是值类型,一个是引用类型,通常是配置文件的处理

  在设计软件的时候,首先只考虑聚合情况设计出多个高内聚的模块,然后再使用不同的耦合方式来完成项目的需求,通过这样做,我们最终得到一个高内聚低耦合的项目,因为高内聚和低耦合是两个相反的名词,在高内聚的情况下,项目依然可以运行,是否也说明 该项目是低耦合呢?

猜你喜欢

转载自www.cnblogs.com/mrzhu/p/12363484.html