模块
模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决。
耦合主要描述模块之间的关系, 内聚主要描述模块内部。模块的粒度可大可小, 可以是函数, 类, 功能块等等。
耦合
模块之间存在依赖, 导致改动可能会互相影响, 关系越紧密, 耦合越强, 模块独立性越差。
比如模块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");
招商帮:我们都知道,在学校门口做生意一般客源比较稳定,而且大多都是学生、老师和家长,消费水平也比较低,所以很适合一些初期想要创业的朋友们。相信每个人都经历过学生时期,也知道在学校门口一出来看到卖各种各...
一、骗子会把一些产在的照片放在网上,通常都会把一些产品的新图片放在网上,来欺骗你,让你以为这些产品都是新品,然后就吸引你去和他谈价格。这个时候你就要注意了,一般骗子会同意你提出的价格,然后给你改价格。...
1、空调常见六大问题之一:空调毛细管或者单向阀有问题 解决办法:及时更换毛细管或者单向阀,这样就能使空调再次制热了。 2、空调常见六大问题之二:室外温度过低。 解决办法:手动用工具将空调上结...
兔子的眼睛都是红色的吗?事实上,并不一定。不同品种的兔子,眼睛的颜色也不尽相同,有红色、蓝色、茶色等。也有的兔子左右两只眼睛的颜色不一样,白、黑、灰、棕等,这是常见的四种颜色,也有几种颜色混合的情况,...
在时事新闻中,我们经常能听到外国右翼左翼政党怎么怎么了。在我们的历史课本中也屡次提到“左倾”、“右倾”以及“左派”、“右派”等名词。这些名词都以“左”、“右”两字作为区分,意思显然相反,每个都带“...
相信很多人在生活中都发生过手脚麻木的情况,相比较之下,老年人往往会更容易出现。但是,如果是经常性的手脚麻木,就应当要多加注意了。 一般来说,经常性手脚麻木情况发病的原因如下: 1、周围神经因素...