C#中松散耦合的最佳工具是什么?

时间:2010-01-02 23:45:41

标签: c# loose-coupling

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

感谢。

7 个答案:

答案 0 :(得分:12)

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

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

依赖注入

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

以下是应用程序的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");
    }
}

服务导向

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

这意味着当需要例如与解决方案的Shipping子系统通信时,应用程序只需要知道系统接口及其地址,并且不需要了解其内部实现。这几乎可以看作是基本面向对象原则的更广泛应用。


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

答案 1 :(得分:2)

大概是你的大脑?

考虑接口编程。将库构建为具有最小和显式接口的自包含代码的小岛。限制所有符号的范围,但特别是可变符号(例如变量)。除非它们是相关的,否则不要泄露实施细节。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

  • Good OOD
  • 使用接口
  • IoC(DI,例如Microsoft.Practices.Unity或Windsor等)
  • 适当的设计模式(MVC,n层等)

答案 4 :(得分:1)

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

答案 5 :(得分:0)

放松耦合的一个好方法是Dependency Injection

答案 6 :(得分:0)

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