代码的耦合的原理和场景

2017-02-11 14:59:21

请关注唯心的个人微信公众号:craft6-cn(中划线,也可以搜索:领域驱动业务建模)

一、代码耦合的概念和分类

     本文参考《浮现式设计》一书,并糅合我的理解、画图和网上资料撰写。   


     软件系统中,代码耦合表示系统某一个部分发生变化时会影响到另一部分的情况。     

     对耦合程度复杂的模块或核心模块进行修改时,就会出现牵一发而动全身的情况,
如果耦合设计得不好,就会导致我们不敢改,不敢重构,不敢优化的情况。


     系统是一定存在耦合的,只是看耦合是否合理,是有意耦合,还是意外耦合。

     有意耦合是我们设计时规划的耦合,是好的耦合。
     意外耦合是我们开发过程中,由于设计水平、代码质量的原因无意识出现的耦合,
是不好的耦合。  

   

      代码耦合分为四种类型:

    • 标示耦合

    • 表示耦合

    • 子类耦合

    • 继承耦合

   

   下面逐一阐述说明。

二、标识耦合

    

   实体A 知道 实体B的存在,但不知道实体B怎么使用(即不会调用实体B的任何方法)
   在这种耦合情况下,实体B如果被删除掉,会影响实体A的编译,但是修改实体B的方法或实现,对实体A没有影响。
   标示耦合是最基本的耦合,大量存在系统中。
   可以通过组合的方式,比如实体有变量包含实体B或者实体B的集合。
   实际场景:订单子项表中关联产品实体表,表示该订单子项对应相应的商品。

   标识耦合.jpg


 

三、表示耦合

   实体A 除了知道实体B存在,还调用了实体B的方法。
   在这种情况下,实体B的接口如果修改,比如更名、增减参数,会影响实体A的编译。这时就是表示耦合。
   表示耦合比较常见,好坏视同实际场景。
   实际场景:订单子项表调用了ProductPo的getPrice(获取价格)来计算该项目的总价。
   表示耦合.jpg


四、子类耦合

    实体A 调用 接口B 的方法来完成某项工作,实体A 的调用范围限定在接口B提供的方法,
至于它的子类怎么实现的实体A不关心(应该是第三方工厂类C关注的),但是实体A 对接口B的
实例进行强制转型,转为子类D,这样实体A就可以调用子类D的非接口方法,那实体A就和子类D
产生了耦合。
   
    子类耦合是不好的耦合。

   
    实际场景:订单计算促销规则时,直接调用规则接口的实现类计算。
子类耦合.jpg


五、继承耦合

   实体A 继承实体B,通过继承获得实体B的保护级别或以上的方法。
   继承耦合一般情况下是好的耦合,有利于减少冗余,但是但继承深度不断变化时,

会出现一些父类方法并不是子类需要的,而且如果使用了模板模式方法时,子类还被迫实现
自己不需要的抽象方法(UnsupportedMethodException),那就成了不好的耦合了。  
   使用场景,一般在框架内,比如一些公共方法(增删改查)可以在抽象类中实现。
继承耦合.jpg


六、要避免的耦合 —— 双向耦合

    双向耦合表示两个实体之间均至少存在标识耦合。

     这样删除任一实体时,另一个实体将无法编译通过。

     一般情况下这种耦合是不好的,意外耦合大多数场景都是这种双向耦合。

     如下图:部门和员工实体相互依赖。

双向耦合.jpg


     而且,如果员工列表需要显示员工所属部门的名称(常见需求),那员工实体

对部门实体就存在了表示耦合,耦合程度更高。

     所以这个场景下,GroupPo不应该直接包含员工集合,而是通过外部的服务方法

来提供查询,这样就将耦合解除了。如下图方式:


双向耦合解耦.jpg


七、耦合(依赖)的方向

    耦合的方向:

    • 从高层往底层
      对于系统而言,底层表示一些公共的接口、常量、工具方法和服务方法。
      高层是业务层,所以高层耦合底层是比较合适的。

    • 特定业务耦合通用业务
      比如订单实体耦合商品实体(标示、表示耦合方式);
      商品实体标示耦合商品分类实体。

    • 从不稳定向稳定
      不稳定表示会频繁修改,变化,这类代码适合耦合其它代码,而不适合其它
      代码依赖它,否则它频繁修改,就导致整个系统跟着震荡了。

    • 复杂的依赖简单的
      简单的指的是业务、算法、存储等方面的。


   一般我们进行代码重构时,发现存在双向耦合、方向相反的耦合,都要密切注意仔细思考,
是不是耦合设计出了问题,是不是有意外耦合出现。


可通过扫描左侧二维码阅读本文。本站文章均为颜超敏原创,欢迎转载,请注明出处即可,转载可通过下面的社会化工具快速完成。

分享到:


代码的耦合的原理和场景

代码耦合

本文参考《浮现式设计》一书,并糅合我的理解、画图和网上资料撰写。         

软件系统中,代码耦合表示系统某一个部分发生变化时会影响到另一部分的情况。         

对耦合程度复杂的模块或核心模块进行修改时,就会出现牵一发而动全身的情况, 

如果耦合设计得不好,就会导致我们不敢改,不敢重构,不敢优化的情况。

颜超敏,唯心六艺,Craft6.cn,电子商务博客,电子商务研发,电商研发,电子商务研究,电商研究,电子商务专家,电商专家,电子商务知识,电商知识,电子商务教程,电商教程,电子商务模式,电子商务平台,电子商务商业模式,电子商务数据库设计,电商数据库设计,电子商务系统分析,Java架构设计,Java软件架构,B2C,O2O,o2o模式,o2o电子商务,o2o电子商务平台,中国电子商务,电子商务平台建设方案
粤ICP备14060523号 Copyright @2014 -唯心六艺软件