DDD中的Presentation VS Application层


9

我在域驱动设计中的表示层和应用程序层之间划清界限时遇到麻烦。

控制器,视图,布局,Javascript和CSS文件应该放在哪里?

是在应用程序层还是表示层中?

如果它们都放在同一层,那么包含另一层的是什么?是空的吗?

Answers:


7

仅仅因为有人创建并命名了“应用程序层”和“演示层”并不意味着您的应用程序应该拥有它们。创建大量代码后,应该创建图层,然后将它们分组在一起,并希望为该组命名,以便于开发人员之间的交流和代码的清晰性。

从DDD点开始。应用层是不是域层的所有内容。其中包括应用程序逻辑,表示和应用程序服务。


2
谢谢,的确,您使我意识到,对于我的案例而言,将Application和Presentation分开是没有用的。简约至上!
Matthieu Napoli

如果DDD在表示层中具有REST API而不是UI,则REST API是应用程序层还是表示层。我现在感到困惑,因为我确信REST API是一个表现层..
达里奥格兰尼奇

8
实际上,DDD按照从高到低的顺序规定了四个层:表示,应用程序,域,基础结构。因此,应用层并没有包括“演讲”。另外,编写大量代码之前决定层是一个好主意,因为这不仅涉及将代码分组在一起,而且还涉及限制编译时依赖性的方向。
罗格里奥

11

从DDD角度来看,应用程序层和表示层之间存在很大差异。

尽管DDD围绕如何使用DDD构建块和概念(例如有限的上下文,无处不在的语言等)来围绕领域建模,但是清楚地标识和分离应用程序中的各个层仍然至关重要。

该架构在实现成功的DDD应用程序中起着重要作用。洋葱式架构是近来大肆宣传的著名架构:

在此处输入图片说明

在此设计中,UI /演示文稿层和应用程序层明显分开。将2合并在一起会在2层之间引入紧密的耦合,这两个层具有明确的独立关注点和职责。

表示层应仅容纳表示逻辑。避免了解太多的智能用户界面。除了CSS,JS,模板,表单以及与响应和请求对象相关的所有内容外,它主要包含MVC的Controllers和视图。

通过表示发布的动作通过命令委托给应用程序层。应用程序层包含应用程序逻辑。它通常映射到用例。它包含系统应满足用例的操作。典型的应用程序服务将要求存储库返回一个聚合,然后对该聚合调用一个操作。

看看Vaughn Vernon的IDDD中的示例项目


2
+1。这就是我实施项目的方式。立刻,我能够从中获益。自从我抽象到一个应用程序层以来,我能够拥有多个表示层。例如,我们的Web api和我们的网站都占用了应用程序层,这节省了很多时间和重复的代码,因为我的Web应用程序不必构造往返于Web api的消息传递,并且使所有逻辑保持同步两者之间。
Sinaesthetic '16

在哪里entry point,并composition root放在哪里?我一直认为这是Application分层的责任。但是现在看来这是Presentation一层。
Denis535

2

域驱动设计与表示层或应用程序层均无关。DDD是一种主要关注域层的方法。也就是说,DDD不会对除域层以外的任何其他层施加任何约束,并且您的问题也可以在任何其他方法的上下文中提出。

话虽如此,在DDD应用程序中使用四层体系结构是非常普遍的。这是一个此类应用程序的示例,其中显示了图层及其预期用途:DDDSample Architecture。因此,如果选择使用此体系结构,则视图和布局将进入“接口”层,而控制器(如果与接口无关)将进入“应用程序”层。

您也可以选择任何其他类型的体系结构,因为我已经说过DDD没有施加约束。许多MVC框架具有不同的结构,但也可以用于DDD应用程序。然后,当然,您将相应地放置视图和布局。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.