耦合对象

时间:2011-04-20 16:31:36

标签: design-patterns coupling cohesion

假设我分别有A,B和C类的doA(),doB()和doC()方法。

除非我错了,doA()方法应该属于A类。它必须从A类执行。如果一个方法doA()负责A,则存在于B类,而不是A类耦合到B的服务。这也代表低内聚力和高耦合

我的推理是否正确?

1 个答案:

答案 0 :(得分:1)

如果一个类的所有方法都对其所有成员变量进行操作,则该类具有最大内聚

public class MyClass
{
    private int value1;
    private int value2;
    private int value3;

    public int Method1()
    {
        return value1 + value2;
    }

    public int Method2()
    {
        return value1 - value2;
    }

    // doesn't belong on this class
    public int Method3()
    {
        return value3 * 2;
    }
}

耦合有两种形式:

  1. 一个类在内部使用另一个类。这是耦合,但有点好,因为它是一个超越继承的组合的例子
  2. 示例:

    public class MyClass
    {
        public void Method1()
        {
            var c = new MyOtherClass();
            c.DoSomething();
        }
    }
    
    1. 更糟糕的耦合看起来像这样,通常被称为Law of Demeter违规。
    2. 示例:

      public class MyClass
      {
          public void Method1()
          {
              var c = new MyOtherClass();
              var size = c.Members.Size;
              ...
          }
      }
      

      在这种情况下,MyClass不仅会耦合MyOtherClass,还会耦合MyOtherClass结构,这就是您遇到麻烦和代码的地方变得僵硬和脆弱。