一些DDD书籍声明,比如[1],虽然我们有一个域模型,但是我们可以有几个应用程序服务层(有些使用术语服务层)。这是因为应用层是应用程序到域模型的特定UI和基础结构层之间的接口,因此,如果有多个用户接口处理后端,则可能存在多个应用程序服务层。这一点向我提出了在哪里定位应用层的问题。
我正在用.NET C#创建一个应用程序。整个应用程序都在一个解决方案中,其中UI(我们有三个使用后端的不同winforms应用程序)是单独的项目,后端项目(包含域层和基础结构层的类库)是一个单独的项目:
-- My Solution
|
+-- Application.UI Number 1
+-- Application.UI Number 2
+-- Application.UI Number 3
+-- Application.Backend
|
+-- Domain Layer (Model and Domain Services)
+-- Infrastructure Layer (Repositories with ORM-Tool)在示例中,到目前为止,我已经看到应用程序服务层被放置在Application.Backend中。但是,基于我们可以为每个UI提供不同的应用程序服务层这一事实,这是正确的吗?您把项目Application.ApplicationLayer1、Application.ApplicationLayer2和Application.ApplicationLayer3放在哪里?还是将所有应用程序层合并到一个应用程序服务层?
埃斯波西托等人[1]状态:
表示层和应用层是系统前端的一部分;
他们在其中一个示例中添加了Application.UI项目中的应用层。其他书籍,如[2],有一个独特的应用层在后端,而不是在前端。
在UI中插入应用程序服务层会让我很恼火。原因是应用程序服务层包含应用程序的所有业务用例。它是域模型和基础结构层的客户端。这意味着,通过在UI中放置应用程序层,每个UI将有自己的应用层。但是,UI-1中使用的一些用例也很有可能在UI-2中使用。因此,您将有代码重复。
哪一个是正确的?
发布于 2020-12-09 11:45:13
我确实认为应用层只是域的入口点。应用程序服务和/或事件处理程序可能存在于该层中。可视化层考虑到洋葱体系结构,应用层封装了域层。
很高兴你挑战了它,但我认为你已经用你自己来回答它了。应用层应该是后端的一部分。
不过,我不会用UI来映射1比1的服务。我会用特征或资源把它们分开。如果不产生大量开销,使用命令和视图驱动的应用程序服务进行额外的写/读分离也会更好。如果您的UI需要相同的数据,但需要转换或丰富,您可能希望在中间的一个额外的“转换”层中解决它,或者在查询接口时通过更灵活的方法(如GraphQL)来解决它们。
这是我对此的看法。
https://stackoverflow.com/questions/65157091
复制相似问题