组件化设计及边界定义
软件开发行业共识,应该将复杂的软件进行拆分,拆成多个低复杂度的子系统,子系统还可以继续拆分成更小粒度的组件。即软件需要进行模块化,组件化设计。
Java 开发依赖的一个个 Jar 包就是组件。
软件设计的核心目标是 高内聚,低耦合。
组件内聚原则
组件的高内聚可以遵循以下三个原则。
- 复用发布等同原则:软件复用的最小粒度应该等同于其发布的最小粒度。
- 共同封闭原则:将那些同时修改,并且为了相同目的而修改的类放到同一个组件中;将不会同时修改,并且不会为了相同目的而修改的类放到不同的组件中。
- 共同复用原则:应将互相依赖、共同复用的类放在同一个组件中。不要强迫一个组件的用户依赖他们不需要的东西。
组件耦合原则
组件的耦合讨论组件之间的耦合关系应如何设计。
无依赖循环原则:组件关系中不应该出现循环依赖。出现组件循环依赖,系统就会变得非常不稳定,可能会出现莫名其妙的问题。
稳定依赖原则:组件依赖必须指向更稳定的方向。即变更不稳定的组件,要依赖稳定的组件。
稳定抽象原则:一个组件的抽象化程度应该与其稳定性程度一致。即一个稳定的组件应该是抽象的,而不稳定的组件应该是具体的。
以 JDBC 为例,在JDK 中定义 JDBC 接口组件抽象,位于 java.sql 包,应用开发时使用 JDBC 的接口编程。发布应用时需要指定具体的实现组件,可以是 MySQL 实现的 JDBC 组件,也可以是 Oracle 实现的组件。