我被要求开发将作为通用总线不采取行动一层任何以NServiceBus直接引用.到目前为止,由于对不显眼的消息的支持并不是太难.除了现在我已被要求提供我们自己的IHandleMessages定义,并找到一种在连线过程中映射它的方法.所以我在想这样的事情:
public class MessageHandlerAdapter<T> : IHandleMessages<T>
{
IUnityContainer container;
public MessageHandlerAdapter(IUnityContainer container)
{
this.container = container;
}
#region IMessageHandler<T> Members
public void Handle(T message)
{
var handler = container.Resolve<IHandle<T>>();
handler.Handle(message);
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
IHandle将成为我们自己的定义(顺便说一下,它与IHandleMessages完全相同).我希望能够反映AppDomain并找到所有实现IHandle的类并将它们注册到容器中,然后注册一个具有相同类型T的MessageHandlerAdapter.
我的问题是我已经使用NServiceBus将近2年了,我不记得在NSB管道中将这种功能挂钩到哪里.
Sim*_*mon 42
您可能不喜欢这个答案但是......不要为您使用的工具编写抽象层.
我见过许多人试图围绕某些工具编写抽象层的实例.主要是案例是日志记录和ORM框架.现在,当他们这样做时,人们就有了良好的愿望.他们希望"能够轻松切换库X".不幸的是,由于几个原因,这是一个坏主意
这一切都归结为时间.您正试图花时间抽象该工具.期望在未来节省更多的时间.问题是,如果您决定切换,您将花费更多时间来创建和维护此抽象.这应该是您对同事的回应.
这是一篇来自Ayende的有趣文章,讲述了抽象的弊端.其中大部分适用于这种情况http://ayende.com/blog/4784/architecting-in-the-pit-of-doom-the-evils-of-the-repository-abstraction-layer引用
...尽量避免不必要的复杂性...添加额外的抽象层通常只会让它变得困难.
归档时间: |
|
查看次数: |
1779 次 |
最近记录: |