我想知道有人在考虑单一职责原则(SRP)的情况下创建GameManager的合理性。具体示例:记忆游戏的GameManager(带有您必须匹配的纸牌)。显然,它有很多责任:跟踪轮到谁,在轮到之间切换,跟踪游戏何时完成,获胜者是谁等等。

最佳答案

对超出对象责任有疑问时。有一个与SRP相关的概念cohesion,这很客观。在Konamiman's answer中,GameManager具有100%粘性。这意味着所有依赖项(实例字段)都在所有公共方法中使用。

0%相反:

class GameManager {
   private int anInt;
   private object aObj;

   public void Foo() {
         // Do anything but using anInt or aObj
   }
}


如果您在对象中找到多个内聚组件:

class GameManager {
    private T1 obj1;
    private T2 obj2;

    public void Foo() {
       T1.F1();
    }

    public void Goo() {
       T2.G1();
    }
}


该类应分为两部分:

class GameManagerFoo {
    private T1 obj1;

    public void Foo() {
       T1.F1();
    }
}
class GameManagerGoo {

    public void Goo() {
       T2.G1();
    }
}


@ Jackl56好点:关于属性设置器和获取器,您有2个选择。您无法考虑它们,或者您可能认为它们降低了内聚力,但达到了可接受的水平。

09-25 22:22