gpt4 book ai didi

c# - 如何将域和存储库层公开为服务?

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:42 24 4
gpt4 key购买 nike

我的应用程序中目前有以下层:

  1. 应用程序接口(interface)
  2. 应用服务层
  3. 领域模型
  4. 存储库

较低的 (2) 层(域和存储库)提供了几乎完全跨业务需求的重用,因此我考虑至少将我的域模型公开为服务,可能是 WCF 服务。基本上域实体数据、行为和持久性是可重用的,我需要一种方法来集中公开这些。

我已阅读以下内容 ( Sharing domain model with WCF service ) 和类似内容,这些内容充分说明了为什么直接通过 WCF 公开域实体。大多数示例表明创建数据契约以公开域数据,然后使用映射机制在域和 DTO(数据契约)数据之间进行映射。到目前为止一切顺利。

如果我的域层中有如下所示的方法,我如何通过新的 WCF 服务公开它?我以为我只会公开 DTO,因此如何公开我想跨进程重用的共享/公共(public)域行为?

public int ProcessSomeRule(string param1, string param2)

如果答案是在 WCF 服务上创建一个方法作为代理仍然不直接公开 ProcessSomeRule 方法,我对此很满意,但这会产生另一个问题。这种抽象的目的和在 WCF 服务上创建一个名为 ProcessSomeRuleWCF(string,string) 的方法的目的只是在内部转向并调用域方法似乎仍然是耦合的并且不提供纯粹的抽象.它仍然对签名更改敏感。

我读到通过不直接公开方法,我们可以在内部进行更改而无需修改合约接口(interface)。好吧,这听起来不错,但是如果我的内部方法需要一个附加参数并且现在有签名`ProcessSomeRule(string, string, string),猜猜怎么着?我的契约(Contract)接口(interface)方法现在将中断,因为它缺少第三个参数,所以我的接口(interface)必须更改。不确定如何做到这一点并仍然使抽象有值(value)?

我的存储库以相同的方式是通用的,可以跨进程使用,我也想重用这一层。目前我的存储库 (UoW) 接口(interface)被注入(inject)到我的 AppService 层,所以我不知道如果存储库层是 WCF 服务,这将如何工作。

问题:如何公开域层和存储库层的共享行为以及这些新层的名称是什么?新层是否公开名为“Domain Service”的域并位于“AppService”和“DomainModel”之间?

最后,如果我在任何方面走错了路,请随时引导我回来。谢谢!

最佳答案

How do I expose the shared behavior of the domain and repository layers and what would the names of these new layers be called?

hexagonal (ports & adapters) architecture 的上下文中,您的领域层将由应用程序服务封装,从而定义您的应用程序的核心。应用程序服务通过委托(delegate)给聚合和域服务以及编排对存储库和基础设施服务的访问来实现用例。接下来,您可以使您的应用程序“适应”基础架构。让存储库实现在域层中声明的存储库接口(interface)就是一个例子。存储库实现充当域和外部世界之间的适配器。与 WCF 服务类似,在 DDD 中通常称为开放主机服务,它们使您的应用程序适应传输基础设施。 WCF 服务或 ASP.NET WebAPI 服务将是委托(delegate)给应用程序服务的相对较薄的层。同样,这一层的目的只是作为一个适配器。该层确实拥有它公开公开的合约。在 DDD 中,这被称为发布的语言。例如,在 WCF 中,它将通过 DataContractDataMember 属性进行定义。这些契约(Contract)是外部系统访问您的域的方式。在已发布的契约(Contract)和内部域之间留出缓冲空间很重要,因为它们可能会以不同的速度变化并且有不同的消费者需求。

Is the new layer exposing the domain named 'Domain Service' and sit between 'AppService' and 'DomainModel'?

不,领域服务是领域层本身的一部分,与实体、聚合和值对象一起存在。

关于c# - 如何将域和存储库层公开为服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15116413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com