public class TightlyCoupledClient{
public static void main(String[] args) {
TightlyCoupledServer server = new TightlyCoupledServer();
server.x=5; //should use a setter method
System.out.println("Value of x: " + server.x);
}
}
class TightlyCoupledServer {
public int x = 0;
}
在“J2J 5平台的SCJP考试”中指出,如果a和b互相使用,它们是紧密耦合的。它使用上面的例子。但TightlyCoupledServer看起来好像它使用了TightlyCoupledClient。我怎么弄错了?
答案 0 :(得分:1)
相互依赖只是耦合被认为是紧的时候的一种情况。紧耦合的另一种情况是所谓的内容耦合,which occurs when one module modifies or relies on the internal workings of another module。对类名的了解被认为是TightlyCoupledServer
模块内部工作的一部分;其成员变量的知识也是如此。
添加接口并对其进行编程会减少耦合。使用实现接口的TightlyCoupledServer
实例注入代码会进一步减少耦合。
答案 1 :(得分:0)
简单词语中的紧耦合意味着,一个类直接依赖于其他类。 因此,如果修改发生在一个中,则必须测试两个类的功能是否存在任何行为不匹配。
这里TightlyCoupledClient直接依赖于TightlyCoupledServer。因此,如果修改TightlyCoupledServer的构造函数之类的东西,则必须为TightlyCoupledClient适当地测试更改。
答案 2 :(得分:0)
这些类是相互依赖的,但是相当微妙。
显然,TightlyCoupledClient
直接取决于TightlyCoupledServer
。它就在源代码中。
TightlyCoupledServer
在什么意义上依赖于TightlyCoupledClient
?好吧,服务器类有一个公共字段,可能它依赖于它的客户端 - 所有这些,而不仅仅是TightlyCoupledClient
- 正确地写入这个字段。因此,要验证TightlyCoupledServer
的正确性,必须检查系统中可能写入此字段的所有内容的代码。
考虑为TightlyCoupledServer
编写单元测试。我们想要写一些类似的东西:
assertEquals("x should be 5", 5, x);
要使此断言成立,TightlyCoupledClient
中的代码必须正确,并且必须在此断言之前运行。这是你的依赖。