面向对象设计问题

时间:2010-02-11 21:45:10

标签: oop refactoring object

寻找对此的意见:

我已将各种责任分解为单独的对象。但是,这些对象中的许多对象彼此依赖。所有这些对象都遵循接口,因此我不依赖于实现。我担心对象之间的依赖关系和循环依赖的可能性。这是设计糟糕的症状吗?其他人在分离责任和管理依赖关系方面做了什么?感谢。

4 个答案:

答案 0 :(得分:2)

重要的是对象模型有Low CouplingHigh Cohesion。这意味着只有当他们必须(耦合)并且他们应该做一件事而且只做一件事(非常好)(Cohesion)时,事情应该依赖于其他事物。关于何时做出这些决定而不是经验(这意味着从错误中学习)将是你的主要驱动力,没有简单的答案。有很多用于解决耦合的设计模式(Facade, Composite, Memento, Decorator, etc)。凝聚力通常只是一种重构练习,可以在您开始使用它们时将事物移入或移出类。

答案 1 :(得分:1)

一般来说,我试图避免像瘟疫那样的循环依赖,因为它会使事情变得痛苦并且实例化。它还表明圆形悬垂物体非常紧密地耦合。虽然这可能是必要的,如果它代表您的问题的基本复杂性,在这些情况下应该更简单和干净地表达这种耦合。如果一个对象显然是“基础”对象而另一个对象显然是“自定义”对象,则可能表明您最好使用继承。具体来说,循环依赖是一个强烈暗示,您应该使用模板方法模式而不是策略模式。循环依赖关系也可能表明您最好离开using a third class to model your problem.

答案 2 :(得分:0)

你可以注入那些依赖项....如果foo依赖于bar的实现,那么让它的构造函数需要一个bar实例作为参数,或者让它通过setter方法设置。

答案 3 :(得分:0)

正如另一位读者已经指出你希望你的课程具有低耦合和高凝聚力。如果您的类存在循环依赖的风险,则听起来您的代码气味很差。

考虑以分层,自上而下的方式查看关系。即哪个类更有意义包含另一个?如果它不兼容,并且您需要两个类的功能,那么请考虑包含两者的复合适配器类。