模块
模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决。
耦合主要描述模块之间的关系, 内聚主要描述模块内部。模块的粒度可大可小, 可以是函数, 类, 功能块等等。
耦合
模块之间存在依赖, 导致改动可能会互相影响, 关系越紧密, 耦合越强, 模块独立性越差。
比如模块A直接操作了模块B中数据, 则视为强耦合, 若A只是通过数据与模块B交互, 则视为弱耦合。
独立的模块便于扩展, 维护, 写单元测试, 如果模块之间重重依赖, 会极大降低开发效率。
内聚
模块内部的元素, 关联性越强, 则内聚越高, 模块单一性更强。一个模块应当尽可能独立完成某个功能,
如果有各种场景需要被引入到当前模块, 代码质量将变得非常脆弱, 这种情况建议拆分为多个模块。
低内聚的模块代码, 不管是维护, 扩展还是重构都相当麻烦, 难以下手。
接口设计原则
好的接口应当满足设计模式六大原则, 很多设计模式, 框架都是基于高内聚低耦合这个出发点的。
举几个栗子
外观模式
为系统中多个子系统提供一致的对外调用, 对客户端隐藏子系统细节, 降低其与子系统的耦合。
桥接模式
JDBC中的把面向厂商的接口(Driver)和面向使用者的API(DriverManager)做了拆分隔离。
// 开发者只需要关注JDBC API, 无需关注不同数据库Driver接口实现Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection(url, username, password);
适配器模式
引入第三方库(hibernate, log4j), 不应该直接在代码中继承或者使用其实体类。
需要抽出上层统一接口, 然后增加实现类, 对外暴露接口。
// 代码与log4j强耦合, 不推荐org.apache.log4j.Logger.getRootLogger().info("info");// 底层可以随意更换log框架FRLoggerFactory.getLogger().info("info");
开场小悟:这段时间最火的消息要属乐视了,关于乐视的新闻层出不尽,乐视到底怎么了?庞氏骗局到底怎么回事?今天晓柒从乐视手机的角度给大家聊聊乐视。突然想到这么一句话,与君分享。有人住高楼,有人在深沟,有人...
uv镜怎么装(老摄影告诉你UV镜和偏振镜怎么选)“买个UV镜吧,这个一定要买,这是保护镜头的。”我们经常可以听到朋友如是说,这样说有一定的道理,但不全对. 为了达到尽量完美的成像效果,光学设计师...
作为一名财务人员经常在财务的数据中分析计算平均增长率,如果说我们要是通过手工来计算的话可以使用带开放的计算器计算出平均增长率,但是如果要有很多数据那我们该怎么计算平均增长值呢,手工计算容易出错,今...
现在大城市里生活各种消费压力很大,房租、吃饭、学费等扣除,每个月工资所剩无几,许多人贷款买车,但是却交不起停车费,正对每个人生活都不容易,很多人会利用业余时间找副业挣钱贴补生活费,那么都有哪些靠谱...
1、洗牙会出血吗? 如果平时刷牙会出血,洗牙时多半会出血,其程度跟牙石量的多少,牙龈炎症的程度成正比。 所以如果你洗牙会出血,那就说明,牙结石已经压迫到你的牙龈了,再不洗牙就晚了。 2、洗牙...
seo具体怎么优化?想必很多从事推广从业者想知道这个的答案。提到具体的网站优化,不外乎做以下两条: 1、站内优化 2、站外优化 先从最简单的说,站外优化,其实也没啥优化的,就是一条,发...