我正在阅读Loose Coupling及其好处,这些都是非常好的东西,但我开始想知道哪些工具可以很好地创建松耦合解决方案?首先我想到的是Type和Interfaces以及Abstract类,但我确信有很多方法可以提供松散耦合。也许Polymorphism有助于创建松散耦合的对象和系统。
感谢。
答案 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)
答案 4 :(得分:1)
MEF是松耦合的最佳工具!从一开始就设计你的应用程序非常友好的MEF /插件,你会发现你的应用程序将非常松散耦合
答案 5 :(得分:0)
放松耦合的一个好方法是Dependency Injection。
答案 6 :(得分:0)
到目前为止,最好的工具是Microsoft CAB(其中包括前面提到的Unity框架) 它包括依赖注入工具,松散耦合事件处理等等。