4

我正在阅读 Loose Coupling 及其好处,这些都是非常好的东西,但我开始想知道哪些工具非常适合创建松散耦合的解决方案?首先我想到的是类型和接口以及抽象类,但我确信有很多方法可以提供松散耦合。也许多态有助于创建松散耦合的对象和系统。

谢谢。

4

7 回答 7

14

这是一个非常广泛的问题——可能太宽泛而无法回答。

但是,可以提供“松耦合”解决方案的两种方法是:

依赖注入

依赖注入(尤其是在使用控制容器反转时)在应用程序或解决方案中提供松散耦合 - 使用依赖注入,您无需对依赖对象的引用进行硬编码,而是对接口进行编码并注入这些接口的实现。

这是应用程序的 Logging 组件的快速代码示例,它实现了 ILogger 接口

public class ConcreteLogger : ILogger
{

    public LogMessage(string message)
    {
        Log.Write(message);
    }
}

然后,您的一个类接收记录器接口的这个具体实现。

public class MyClass
{
    private ILogger logger;

    public myClass(ILogger logger)
    {
        this.logger = logger;
    }

    public void DoSomething()
    {
        // Now if DoSomething needs to call logging it can call what ever ILogger was passed in
        this.logger.Log("We did something");
    }
}

服务导向

面向服务在解决方案的不同子系统之间提供松散耦合 - 使用面向服务,解决方案的每个部分都成为其自己的独立服务,发布和接口(通常是基于消息传递的接口)。

这意味着应用程序在需要与解决方案的运输子系统进行通信时,只需要了解系统接口及其地址,而无需了解其内部实现的任何信息。这几乎可以看作是基本 OO 原则的更广泛应用。


这两者都提供了两种不同类型的松散耦合(这是您的问题的问题之一,它本身的术语是松散定义的)

于 2010-01-02T23:57:40.663 回答
2

大概是你的大脑?

考虑到接口的程序。将您的库构建为具有最少和显式接口的自包含代码的小岛。限制所有符号的范围,尤其是可变符号(例如变量)。不要泄露实现细节,除非它们是相关的。

于 2010-01-03T00:00:08.007 回答
2

其他人已经提供了很好的答案,但我想补充一个想法:使用继承实现的多态性不会促进松散耦合。继承是基类和派生类之间非常强的耦合。

于 2010-01-03T00:32:07.833 回答
1
  • 好的OOD
  • 接口的使用
  • IoC(DI,例如 Microsoft.Practices.Unity 或 Windsor 等)
  • 适当的设计模式(MVC、n 层等)
于 2010-01-02T23:52:36.137 回答
1

MEF 是松耦合的最佳工具!从一开始就将您的应用程序设计为对 MEF/插件非常友好,您会发现您的应用程序将非常松散耦合

于 2010-01-03T03:35:29.353 回答
0

迄今为止最好的工具是Microsoft CAB(包括前面提到的 Unity 框架)
,它包括依赖注入、松散耦合事件处理等工具。

于 2010-01-03T02:22:52.457 回答
0

松散耦合的一个好方法是依赖注入

于 2010-01-02T23:52:22.923 回答