在设计应用程序时,您何时知道对象是紧密耦合的?紧耦合对象/代码的症状是什么?
答案 0 :(得分:3)
让我们拿两个物品A& B:
为简单起见,假设A具有以下属性
名称:字符串 年龄:整数 DateOfBirth:DateTime
B有以下方法:
CreateInstanceOfA(string Name,Integer Age,Datetime DateOfBirth)并返回A的实例,其值初始化为方法参数。
现在,假设您向A:
添加新属性StateCode:string
现在你有问题了。您是否更新CreateInstanceOfA以包含新属性?如果是这样,您必须在引用的任何地方更改代码以包含新字段。如果您选择的语言支持运算符重载,则可以添加新方法。它可能不会破坏编译,但您仍然需要更新代码。更糟糕的是,您将使用旧方法,并且必须在创建后手动设置新属性。
Son A& B真的很紧密。
这不是最好的例子,但它是一种快速查看设计变更可能后果的方法
答案 1 :(得分:2)
您知道,当您的设计中的小更改影响 large 数量(可能与您的更改无关)时,您的设计会紧密耦合。
Class D
是一个为其他类提供某些功能的类
Class A
,Class B
和Class C
直接使用
D
中的任何更改都会影响A
,B
和C
。
现在假设我们想要增强D
来验证来自班级A
的任何操作。如果不影响我们不关心身份验证的B
和C
,则无法做到这一点。由于新的要求,必须重构整个事物。
其他示例:直接访问数据库。所使用的数据库中的任何更改都可能影响所有代码(例如,如果您使用SQL
执行DAO
语句而不是。您的业务逻辑不会发生变化但是切换数据库的新要求会影响代码的所有
答案 2 :(得分:2)
如果你的对象是:
,你可能会遇到紧耦合难以改变。 症状:每次编写新的依赖项变体并希望与其进行通信时,需要将if语句添加到类中。你的代码库有if语句的林可能在全局变量上运行,这使得它成为调试和维护的噩梦。
<强>易碎即可。 症状:对象中的错误可能会吞噬整个系统中意外数量的其他对象。由于依赖关系之间缺乏明确的契约,很难预测您想要在对象中进行更改的后果。
难以重复使用。 症状:在不同的上下文中重用对象意味着拖动其所有依赖项及其详细信息,其中一些可能与该新上下文无关。
难以测试。 症状:您的自动化测试需要在做任何事情之前将大型对象集合在一起,这会使它们变得如此慢。你的测试是脆弱的 - 一个对象细节的变化会影响其所有的依赖关系。测试设置很容易变红。
答案 3 :(得分:1)
经验法则是计算给定类所引用的其他类的数量。有几种方法可以看:
a.getB().getC().getD()
)对任何这些类型的更改都可能导致紧密耦合的类也发生变化。
答案 4 :(得分:0)
Law of Demeter解释了松散耦合的一些简单指南。
在实践方面,您还可以查看Lattix,这是一个帮助您映射和重构依赖项的Eclipse插件