架构设计中常会遇到依赖的问题,依赖如果设计不好,往往会导致紧耦合、难以测试、扩展以及维护升级问题,下面通过几个具体的例子来讨论具体采用什么样的方式解决依赖问题。
1. 示例1
public class Account{
private Date deactivatedAt;
private boolean active = true;
public void deactivate(){
this.active = false;
this.deactivatedAt = new Date();
// ...
}
public Date getDeactivatedAt() {
return deactivatedAt;
}
public boolean isActive() {
return active;
}
}
问题: 难以测试/扩展
解决办法:依赖注入
将所依赖对象注入待测类中:
1. 不在待测业务类中使用new构建
• 其他业务对象
• 第三方依赖对象
2. 不直接使用非常量全局变量、静态类、静态方法
3. 控制传入的对象行为 -> 可分离依赖,可测
重构步骤:
1.抽取Method Object
2.抽取成员变量量
3.构造函数传参
4.抽取接口
2. SOLID原则:
• Single Responsibility Principle 单一职责原则
• Open Closed Principle 开闭原则
• Liskov Substitution Principle 里里氏替换原则
• Interface Segregation Principle 接口隔离原则
• Dependency Inversion Principle 依赖反转原则
2.1 单一职责 (SRP):
一个类应该只为一个原因被改动
什么是职责? 职责是不同用户群对改变的需求
示例2:
职责混合导致紧耦合
• Employee的用户与所有功能耦合
• 如果一个功能改变