Answers:
仅仅因为有人创建并命名了“应用程序层”和“演示层”并不意味着您的应用程序应该拥有它们。创建大量代码后,应该创建图层,然后将它们分组在一起,并希望为该组命名,以便于开发人员之间的交流和代码的清晰性。
从DDD点开始。应用层是不是域层的所有内容。其中包括应用程序逻辑,表示和应用程序服务。
从DDD角度来看,应用程序层和表示层之间存在很大差异。
尽管DDD围绕如何使用DDD构建块和概念(例如有限的上下文,无处不在的语言等)来围绕领域建模,但是清楚地标识和分离应用程序中的各个层仍然至关重要。
该架构在实现成功的DDD应用程序中起着重要作用。洋葱式架构是近来大肆宣传的著名架构:
在此设计中,UI /演示文稿层和应用程序层明显分开。将2合并在一起会在2层之间引入紧密的耦合,这两个层具有明确的独立关注点和职责。
表示层应仅容纳表示逻辑。避免了解太多的智能用户界面。除了CSS,JS,模板,表单以及与响应和请求对象相关的所有内容外,它主要包含MVC的Controllers和视图。
通过表示发布的动作通过命令委托给应用程序层。应用程序层包含应用程序逻辑。它通常映射到用例。它包含系统应满足用例的操作。典型的应用程序服务将要求存储库返回一个聚合,然后对该聚合调用一个操作。
看看Vaughn Vernon的IDDD中的示例项目
entry point
,并composition root
放在哪里?我一直认为这是Application
分层的责任。但是现在看来这是Presentation
一层。
域驱动设计与表示层或应用程序层均无关。DDD是一种主要关注域层的方法。也就是说,DDD不会对除域层以外的任何其他层施加任何约束,并且您的问题也可以在任何其他方法的上下文中提出。
话虽如此,在DDD应用程序中使用四层体系结构是非常普遍的。这是一个此类应用程序的示例,其中显示了图层及其预期用途:DDDSample Architecture。因此,如果选择使用此体系结构,则视图和布局将进入“接口”层,而控制器(如果与接口无关)将进入“应用程序”层。
您也可以选择任何其他类型的体系结构,因为我已经说过DDD没有施加约束。许多MVC框架具有不同的结构,但也可以用于DDD应用程序。然后,当然,您将相应地放置视图和布局。