多个服务使用的域模型
本文关键字:模型 服务 | 更新日期: 2023-09-27 18:16:58
我有一个处理投诉的域模型。许多功能需要向外部世界公开,因此我可以创建一个公开可用的WCF REST服务来实现这一点。其他功能只用于内部目的(管理的东西),所以我可以创建另一个WCF服务,它是内部托管的。
结果是两个服务使用相同的域模型。
从技术上讲,这意味着两个可部署单元(服务)使用相同的类库-因此,如果类库更改,我必须部署两个服务。
这是一件坏事,有一个类库,改变了很多使用超过1个可部署单元?我是否应该让外部服务使用内部服务而不是域模型,以便域模型仅由内部服务使用?
只是想知道最好的方法是什么,确保之后没有技术问题(易于维护和部署)。谢谢你的建议!
编辑:我决定这样做:公共服务将被暴露为WCF REST + JSON,并且只负责将数据转换为移动应用程序所需的正确格式。这个公共服务使用内部命令服务(带完整域的WCF)和内部查询服务(ADO)来执行命令。. NET数据服务)进行查询
这是一件坏事,有一个类库,改变了很多使用超过1个可部署单元?
它可能会产生管理问题,但有时这是不可避免的,特别是对于共享库。然而,在处理域模型时,最好限制公开模型功能的服务的数量。我喜欢你提出的让外部服务参考内部服务的解决方案。然后,外部服务在内部服务之上提供一种外观,而内部服务则专注于公开域的功能。然而,正如Thomas Jaskula所指出的,评估服务的行为方面是很重要的。外部服务是否从内部服务暴露了一组有限的功能,或者它是否一起提供了不同的功能?什么是有界语境?
我不确定我们是否在谈论领域驱动设计,但从你所描述的情况来看,它不适合我。DDD是关于行为的,而不仅仅是实体和值对象。
外部用户可以通过WCF REST Api与您的域进行的交互与管理员可以进行的交互不同。因为的行为可能不一样。然后对我来说,从领域模型的角度来看,你必须对你试图解决的每个问题(WCF和管理)进行建模。这是两个模型
在DDD中,不是只有一个模型来处理业务问题。
但是,如果你的领域只是一个抽象的持久化(哑实体),你可以在两个项目中使用它。但即使这样,我也会创建两个不同的模型,以避免部署问题,并且根据上下文,您可能不会一直使用相同的实体。
这只是我的看法