紧耦合物体有什么症状?

时间:2012-09-03 21:23:48

标签: design-patterns architecture application-design decoupling tightly-coupled-code

在设计应用程序时,您何时知道对象是紧密耦合的?紧耦合对象/代码的症状是什么?

5 个答案:

答案 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 AClass BClass C直接使用 D中的任何更改都会影响ABC
现在假设我们想要增强D来验证来自班级A的任何操作。如果不影响我们不关心身份验证的BC,则无法做到这一点。由于新的要求,必须重构整个事物。

其他示例:直接访问数据库。所使用的数据库中的任何更改都可能影响所有代码(例如,如果您使用SQL 执行DAO语句而不是。您的业务逻辑不会发生变化但是切换数据库的新要求会影响代码的所有

答案 2 :(得分:2)

如果你的对象是:

,你可能会遇到紧耦合
  • 难以改变症状:每次编写新的依赖项变体并希望与其进行通信时,需要将if语句添加到类中。你的代码库有if语句的林可能在全局变量上运行,这使得它成为调试和维护的噩梦。

  • <强>易碎即可。 症状:对象中的错误可能会吞噬整个系统中意外数量的其他对象。由于依赖关系之间缺乏明确的契约,很难预测您想要在对象中进行更改的后果。

  • 难以重复使用症状:在不同的上下文中重用对象意味着拖动其所有依赖项及其详细信息,其中一些可能与该新上下文无关。

  • 难以测试症状:您的自动化测试需要在做任何事情之前将大型对象集合在一起,这会使它们变得如此慢。你的测试是脆弱的 - 一个对象细节的变化会影响其所有的依赖关系。测试设置很容易变红。

答案 3 :(得分:1)

经验法则是计算给定类所引用的其他类的数量。有几种方法可以看:

  • 导入数(Java),使用(C#),包括(C ++)等。
  • 班级中的字段/成员变量数
  • 方法的参数数量
  • 间接类型引用的数量(例如a.getB().getC().getD()

对任何这些类型的更改都可能导致紧密耦合的类也发生变化。

答案 4 :(得分:0)

Law of Demeter解释了松散耦合的一些简单指南。

在实践方面,您还可以查看Lattix,这是一个帮助您映射和重构依赖项的Eclipse插件