耦合度太高还是可以这样设计?
Too high coupling or okay to design like this?
假设我有一个 classA
,它有自己的方法和自己的私有字段,你有什么(基本上遵守封装标准)。然后我有 classB
,它的执行需要 classA
的最终状态(通过 classA
的方法之一获得,这在某种程度上破坏了封装)。然后我们有 classC
,它再次需要 classB
的最终状态。等等等等,让我们说到 classM
。这是否被认为耦合度太高?
编辑:好的,假设我正在设计战利品系统,这取决于掉落是否基于击败的敌人(每个敌人都有不同的掉落几率)。如果敌人被击败,class 处理战斗的东西会掷骰子,不管它是否掉落东西,然后我需要将该状态传播到另一个处理战利品分配的 class。如果有掉落,class 处理战利品执行战利品生成并分配给玩家,如果没有,无效。
最后的执行是这样的:
classA a = new classA;
... //classA does its stuff
classB b = new classB(a.getFinalState());
... // again class does its stuff based on outcome of A
classC c = new classC(b.getFinalState());
以此类推
是的。与级别 2 紧密耦合。这是可以避免的,并且被认为是降低代码灵活性和可重用性的不良做法。测试是一场噩梦。
如果它们具有相互关联的属性,请考虑查看 Builder Pattern
。
Builder pattern is to find a solution to the telescoping constructor anti-pattern
构造函数反模式 是你目前所拥有的。
编辑:您可以通过遵循 Delegation Pattern and its close sibling Decorator Pattern
来实现您想要的
正如已经建议的那样,构建器模式是一个有效的替代方案。这始终取决于您最初的设计目标。
假设我有一个 classA
,它有自己的方法和自己的私有字段,你有什么(基本上遵守封装标准)。然后我有 classB
,它的执行需要 classA
的最终状态(通过 classA
的方法之一获得,这在某种程度上破坏了封装)。然后我们有 classC
,它再次需要 classB
的最终状态。等等等等,让我们说到 classM
。这是否被认为耦合度太高?
编辑:好的,假设我正在设计战利品系统,这取决于掉落是否基于击败的敌人(每个敌人都有不同的掉落几率)。如果敌人被击败,class 处理战斗的东西会掷骰子,不管它是否掉落东西,然后我需要将该状态传播到另一个处理战利品分配的 class。如果有掉落,class 处理战利品执行战利品生成并分配给玩家,如果没有,无效。
最后的执行是这样的:
classA a = new classA;
... //classA does its stuff
classB b = new classB(a.getFinalState());
... // again class does its stuff based on outcome of A
classC c = new classC(b.getFinalState());
以此类推
是的。与级别 2 紧密耦合。这是可以避免的,并且被认为是降低代码灵活性和可重用性的不良做法。测试是一场噩梦。
如果它们具有相互关联的属性,请考虑查看 Builder Pattern
。
Builder pattern is to find a solution to the telescoping constructor anti-pattern
构造函数反模式 是你目前所拥有的。
编辑:您可以通过遵循 Delegation Pattern and its close sibling Decorator Pattern
来实现您想要的正如已经建议的那样,构建器模式是一个有效的替代方案。这始终取决于您最初的设计目标。