如何理解高内聚低耦合?Java/Android 程序员必看的知识

 

推荐阅读:

Android MVC设计模式详解

Android 框架MVVM详解

 

Android MVC设计模式详解

 

Java/Android 常见的设计模式总结,提高代码重用性和扩展

 

    

耦合性(英语:Coupling,dependency,或称耦合力或耦合度)是指一程序中,模块及模块之间信息或参数依赖的程度。
     内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反之亦然。耦合性和内聚性都是由提出结构化设计概念的赖瑞·康斯坦丁所提出[1]。低耦合性是结构良好程序的特性,低耦合性程序的可读性及可维护性会比较好。

 

耦合的因素

 

 

  造成耦合的强度依赖于以下几个原因可以是一个模块对另一个模块的调用;一个模块向另一个模块传递的数据量;一个模块施加到另一个模块的控制的多少;模块之间接口的复杂程度。

 

 

耦合因素从强到弱的排序,如下:

 

 

  (1)内容耦合。当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。类与类之间直接调用或继承关系都是属于这种耦合。

 

  (2)公共耦合。两个及两个以上的模块共同引用一个全局数据项就称为公共耦合。

 

  (3)控制耦合。一个模块在界面上传递一个信号(如开关值、标志量等)控制另一个模块,接收信号的模块的动作根据信号值进行调整,称为控制耦合。

 

  (4)标记耦合。模块间通过参数传递复杂的内部数据结构,称为标记耦合。此数据结构的变化将使相关的模块发生变化。

 

  (5)数据耦合。模块间通过参数传递基本类型的数据,称为数据耦合。

 

  (6)非直接耦合。模块间没有信息传递时,属于非直接耦合。

 

 

 

耦合的威胁


  相信多数开发人员遇到过高耦合的代码带来的烦恼,在了解什么是耦合后,对为什么要降低耦合度也已经有一定的认识了。如果在耦合度很高的情况下,修改代码将会“牵一发而动全身”。如果在没有理清这些耦合关系之前就修改,很可能造成未知的程序异常或业务数据错乱。特别是对于需求变化较多以及多人协作开发维护的项目,修改一处模块,可能导致本来运行稳定的模块出现错误,甚至导致恶性循环,bug永远改不完。项目开发的效率降低,开发成本增加。

 

 

 

 

 

   如何解决以上耦合带来的潜在威胁?其中,一个重要手段就是降低代码的耦合度,但也不可能完全做到有零耦合,因为也是几乎无法做到得事情。只需要项目开发之前,提前去设计代码的组织结构。比如,知道某功能后期基本不维护修改,那即使高耦合了也没关系,反之就需要通过设计模式去降低耦合度。

 

 

常见设计模式学习连接:Java/Android 常见的设计模式总结,提高代码重用性和扩展下

 

 

耦合度降低

 

常见的降低耦合的方法总结,如下:

(1)少用类的继承,多用接口隐藏实现的细节。

    我们知道Java的面向对象编程中接口属于多态性,而引入接口除了支持多态外, 其中另一个目是隐藏实现细节也是。这个知识点很重要,在现在流行的各种设计模式MVC\MVP等 ,用到的核心技能。比如,一个网络请求的类 GetData.class  ,里面有一个getInfo()方法,里面写了从Java后台获取接口数据的代码。通常,都会在需要调用数据的页面,使用 new GetData().getInfo()  去调用。那么如何隐藏实现的细节代码呢? 就是写一个接口 GetDataImp.clss ,在 GetDataImp.class 里写没有方法体的 getInfo() (ps:允许传参),让GetData implement(实现)接口 ,并且会实现getInfo()的具体代码 。然后在需要调用的页面,直接New GetDataImp .getInfo() 即可。
 

(2)模块的功能化分尽可能的单一

    道理也很简单,功能单一的模块供其它模块调用的机会就少。其实这是高内聚的一种说法,高内聚低耦合一般同时出现。

 

(3)遵循一个定义只在一个地方出现  

 

(4)少使用全局变量     

 

(5)类属性和方法的声明少用public,多用private关键字

 

(6)多用设计模式

    比如采用MVC的设计模式就可以降低界面与业务逻辑的耦合度。尽量不用“硬编码”的方式写程序。同时也尽量避免直接用SQL语句操作数据库。

 

(7)避免直接操作或调用其它模块或类(内容耦合)

    如果模块间必须存在耦合,原则上尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。

 

 

 

本项目是一个基于安卓的框架项目源码 Loonandroid是一个注解框架,不涉及任何UI效果,目的是一个功能一个方法,以方法为最小颗粒度对功能进行拆解。把功能傻瓜化,简单化,去掉重复性的代码,隐藏复杂的实现。以便团队合作或者后期修改变得简单。说框架是夸大了,主要是因为我比较喜欢偷懒,对于一个码农来说,能够偷懒,并且在不影响项目质量的情况下,是不容易的。 很多朋友看到注解就就要吐槽,会影响性能什么的。注解,确实会影响性能。通过注解自动注入,反射会让程序变慢50~100毫秒左右,从体验感基本感觉不出来.硬件性能好的手机可以忽略,经过测试无需太大的担心。我是做外包的,初衷是在不影响项目质量的前提下减少我的工作量,而且BUG其他人改起来相对比较容易,本工具专属外包码农,如果你想做精细,很在意性能数据,请看看就好。 1、基本功能 InLayer注解 InPlayer 注解 Activity生命周期注解 InView注解 InSource注解 InAll注解 后台进程注解 方法点击事件注解 基类注解 自动Fragment注解 手动Fragment注解 2、适配器功能 无适配器 无参baseAdapter 自定义一adapter 自定义二adapter 自动绑定一adapter 自动绑定二adapter 通用适配器 3、综合功能集合 网络请求模块 输入验证 跨进程通讯 Json格式化类 倒计时类 4、傻瓜式下拉刷新 Listview Grid 横向Scrollview 纵向Scrollview 横向ViewPage 纵向ViewPage WebView 5、自定义模块类 自定义模块XML中使用 自定义模块变量使用 6、傻瓜式组件类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值