这被认为是低耦合和高内聚力吗?有改进的机会吗?



我正在努力掌握Robert C.Martin的SOLID原理。目前我正在研究低耦合&高内聚性。我已经创建了一些代码来表示我目前对这个主题的理解。你们能告诉我是否在正确的轨道上吗?有机会改进目前的设计吗?

创建两个地址并将其分配给员工的主应用程序:

public class App {
public static void main(String[] args) {
Address homeAddress = new HomeAddress("This is my Home Address");
Address workAddress = new WorkAddress("This is my Work Address");        
Employee employee = new Employee(homeAddress, workAddress);
employee.getAddresses();
}
}

员工类别:

public class Employee {
private Address homeAddress;
private Address workAddress;
Employee(Address homeAddress, Address workAddress) {
this.homeAddress = homeAddress;
this.workAddress = workAddress;
}
public void getAddresses() {
System.out.println("homeAddress: " + homeAddress.getAddress());
System.out.println("workAddress: " + workAddress.getAddress());
}
}

地址接口:

public interface Address {
String getAddress();
}

具体地址实现1(家庭地址(:

public class HomeAddress implements Address {
String specificAddress;
public HomeAddress(String specificAddress) {
this.specificAddress = specificAddress;
System.out.println("In HomeAddress Constructor");
}
public String getAddress() {
return specificAddress;
}
}

特定地址实现2(工作地址(:

public class WorkAddress implements Address {
String specificAddress;
public WorkAddress(String specificAddress) {
this.specificAddress = specificAddress;
System.out.println("In WorkAddress Constructor");
}
public String getAddress() {
return this.specificAddress;
}
}

如有任何帮助/反馈,我们将不胜感激!提前谢谢。

马克。

这是一个很小的例子,但它可以在耦合/内聚方面得到改进。

这些物体是有凝聚力的。为什么?在Employee对象中,构造函数和getAddresses()(顺便说一下,应该称为printAddresses()(都引用了两个实例变量(这意味着它们涉及相同的事情(。与Address对象相同。

在耦合方面,我认为你可以做得更好。目前,Employee对象"知道"(即耦合到(Address对象的内部表示。这是因为您从Address对象"导出"数据(字符串(,而不是直接打印数据所在的位置

这会使对象更加耦合,并将导致Address对象中的任何更改(例如引入Street和City等(泄漏到Employee。所以它有真正的缺点。

解决方案是在Address中定义一个print()方法,并在那里执行System.out.println()。这与其他概念是一致的,比如德米特定律,告诉不要问。

最新更新