我的应用程序中当前有以下层:
- API
- 应用服务层
- 领域模型
- 存储库
较低的 (2) 层(域和存储库)提供了跨业务需求的几乎全部重用,因此我想至少将我的域模型公开为服务,可能是 WCF 服务。基本上域实体数据、行为和持久性是可重用的,我需要一种方法来集中公开它。
我已阅读以下内容(与 WCF 服务共享域模型)和类似的内容,这些内容表明为什么不直接通过 WCF 公开域实体是有充分理由的。大多数示例表明创建数据合约以公开域数据,然后具有映射机制以在域和 DTO(数据合约)数据之间进行映射。到目前为止,一切都很好。
如果我的域层中有如下方法,如何通过新的 WCF 服务公开它?我以为我只会公开 DTO,因此如何公开我想跨进程重用的共享/公共域行为?
public int ProcessSomeRule(string param1, string param2)
如果答案是在 WCF 服务上创建一个充当代理但仍不ProcessSomeRule
直接公开该方法的方法,我对此很满意,但这会产生另一个问题。这种抽象的目的和在名为 example 的 WCF 服务上创建一个方法,ProcessSomeRuleWCF(string,string)
它只是在内部转身并调用域方法,似乎仍然是耦合的,而不是提供纯粹的抽象。它仍然对签名更改很敏感。
我读到通过不直接公开方法,我们可以在内部进行更改而无需修改合约接口。好的,这听起来很不错,但是如果我的内部方法需要一个额外的参数并且现在有签名 `ProcessSomeRule(string, string, string),你猜怎么着?我的合约接口方法现在将中断,因为它缺少第三个参数,所以我的接口必须更改。不确定如何做到这一点并且仍然使抽象值得?
我的存储库以同样的方式是通用的,可以跨进程使用,我也想重用这一层。目前我的存储库(UoW)接口被注入到我的 AppService 层,所以我不知道如果 Repository 层是 WCF 服务,这将如何工作。
问题:如何公开域和存储库层的共享行为以及这些新层的名称是什么?新层是否公开了名为“Domain Service”的域并位于“AppService”和“DomainModel”之间?
最后,如果我走错了路,请随时指导我。谢谢!