我正在阅读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原则的更广泛应用.
这两个都提供了两种不同类型的松散耦合(这是你的问题的一个问题,它自己的术语是松散定义的)