我什么时候需要紧密耦合和松散耦合?

时间:2012-10-11 11:56:31

标签: c# design-patterns

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

请看: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();
    }
  }

以上用法喜欢紧密耦合!我认为紧密耦合是糟糕的用法。但适配器模式紧密耦合使用。当我需要紧密松散的耦合时?

5 个答案:

答案 0 :(得分:5)

请记住, Gang of Four模式是在依赖注入之前诞生的,它被提及为松散耦合

因此,您展示的示例适配器模式是尝试显示模式如何工作,而不关心松散耦合。

如果您希望代码可测试且可更换,则应使用松耦合,例如:

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

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

答案 1 :(得分:2)

通常,您希望以松散耦合为目标,这意味着在可能的情况下使用抽象。

当您无法使用适当的抽象替换类(Adaptee)时,适配器模式将帮助您执行此操作。

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

答案 2 :(得分:1)

这将帮助您理解它们之间的区别,但是当您需要松散耦合的类时,它在很大程度上取决于您的应用程序的设计。 What is the difference between loose coupling and tight coupling in the object oriented paradigm?

答案 3 :(得分:1)

  

当我需要紧密松散的耦合时?

你应该始终努力寻求松散耦合的设计。可能存在需要紧耦合的边缘情况,或者您继承了具有它的项目,但我认为您的口头禅应该在设计和开发时考虑到可测试性,这意味着低耦合。我还没有完成一个太“松散耦合”的项目,但肯定是在那些“紧密耦合”的项目上工作,后者并不好玩。

答案 4 :(得分:0)

最好采用松散耦合设计的生产代码。这使您的代码易于独立于相关组件进行测试,并且可以轻松替换代码所使用的组件。

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