1

我知道松耦合和紧耦合的信息。但是我暂停什么时候可以决定在哪里使用什么时间?我不明白什么时候需要松耦合和紧耦合?

请看: http: //www.dofactory.com/Patterns/PatternAdapter.aspx#_self1

如果你看适配器类:


  /// 
  /// The 'Adapter' class
  /// 
  class Adapter : Target
  {
    private Adaptee _adaptee = new Adaptee();

    public override void Request()
    {
      // Possibly do some other work
      //  and then call SpecificRequest
      _adaptee.SpecificRequest();
    }
  }

上面的用法就像紧耦合!我认为紧密耦合是不好的用法。但是适配器模式使用紧密耦合。当我需要紧耦合和松耦合时?

4

5 回答 5

5

请记住,四人组模式是在依赖注入之前诞生的,这被称为松散耦合

因此,您展示的示例适配器模式是试图展示模式如何工作并且不太关心松散耦合。

如果您希望您的代码可测试和可替换,则应使用松散耦合,例如:

class CustomerService
{
    private ICustomerRepository _customerRepository;
    public CustomerService(ICustomerRepository customerRepository)
    {
        _customerRepository = customerRepository;
    }
}

要通过构造函数注入customerRepository,您可以轻松地进行模拟ICustomerRepository以进行单元测试。

于 2012-10-11T18:23:27.287 回答
2

通常,您希望以松耦合为目标,这意味着尽可能使用抽象。

当您无法用适当的抽象轻松替换类(Adaptee)时,适配器模式将帮助您做到这一点。

Adapter 是问题 Adaptee 类的包装器。Adapter 派生自抽象 Target 类,调用代码应该只处理 Target,因此它可以保持松耦合。

于 2012-10-11T12:07:44.100 回答
1

这将帮助您了解它们之间的区别,但是当您需要松散耦合的类时,它在很大程度上取决于您的应用程序的设计。 面向对象范式中的松耦合和紧耦合有什么区别?

于 2012-10-11T12:02:53.217 回答
1

当我需要紧耦合和松耦合时?

您应该始终努力实现松散耦合的设计。可能存在需要紧耦合的边缘情况,或者您继承了一个拥有它的项目,但我认为您的口号应该是设计和开发时考虑到可测试性,这意味着低耦合。我还没有从事过“松耦合”的项目,但肯定做过“紧耦合”的项目,而后者并不有趣。

于 2012-10-11T12:23:38.090 回答
0

生产代码最好采用松耦合设计。这使您的代码易于独立于您的依赖组件进行测试,并且很容易替换您的代码正在使用的组件。

有关详细说明,请访问http://rangahc.blogspot.com/2015/05/difference-between-tight-coupling-and-loose-coupling.html

于 2015-05-27T12:53:18.397 回答