我遇到了一个小小的设计问题。
以下情况
图书馆界面
包含每个模型类的接口(仅限getter和setter)
Libray Businnes Logic
包含接口库和DAL的实现。 使用界面&运输车库
图书馆转运: 包含用于消息传递第三方Web服务的类。如果需要,我还想添加第三方库的引用或Web引用。 使用接口库。
到目前为止太好了。现在没有循环依赖。只要需要调用Web服务,业务逻辑库就会使用“transporter”库来调用extern方法。这非常有效。
但现在我需要创建一个Web服务,第三方应该能够在我们这边创建业务对象。我想创建一个“转换库”,其中bussines对象转换为外部webservies的消息对象,反之亦然。我认为这是我当前架构的问题。如果我想创建这个库,我会得到循环依赖。 原因是
我希望我能够很好地解释我的情况。
感谢您解决这个问题的每一个想法。
答案 0 :(得分:8)
ITransporter
界面
它提供的服务模型
“输送”。把它放在接口库中。让Transporter
实施ITransporter
。ITransporter
界面
而不是直接使用
Transporter
。现在的业务
库不需要依赖
运输车库了。Transporter
的实例
并将其注入您需要的地方
您商家中的ITransporter
个对象
码。 答案 1 :(得分:1)
您可以重新考虑您的设计。将所有第三方Web服务组合到一个DLL中,然后将可能被视为基本功能(转换)的内容移动到另一个库中是否有意义?我认为为每个Web服务(或服务组,如果有意义将它们分组)创建具有适当功能的单个程序集会更有意义。
假设“每个项目中都不需要[转]功能”,你也有一些错误的逻辑。如果是这种情况,为什么业务逻辑程序集依赖于它?
答案 2 :(得分:0)
我会将转换代码放在transporter库中。转换是特定于服务的,并且不需要将它们与传输分开。您可能希望使用命名空间来分隔不同的服务及其转换。我还考虑不将所有服务放入单个库中。如果将它们放在一个库中,你将失去以细粒度方式引用它们的能力 - 它是全部或全部。