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

Tar*_*rik 2 c# loose-coupling

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

谢谢.

Dav*_*all 12

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

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

依赖注入

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

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

public class ConcreteLogger : ILogger
{

    public LogMessage(string message)
    {
        Log.Write(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

服务导向

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

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


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