【发布时间】:2015-10-25 07:35:29
【问题描述】:
我已经进入 DDD 几个月了,大多数书籍都强调Domain Layer,但对应用程序的关注不多。他们只是说Application Layer 是 UI 和 Domain 之间的粘合代码,mainly is a procedural code。
"procedural code" 我在想它是一个concrete implementation,应用层不应该提供Interfaces。
我读过的关于应用层的一个例子是 Web 服务 (WebAPI)。
这是否意味着如果我有 ASP MVC 应用程序,它会被视为我的应用程序层与同一项目上的演示文稿?并且所有应用服务都将存在于 MVC 项目中?
如果我想提供 Web API,我应该在与 Web API 相同的项目中创建另一个应用程序服务实现吗?
命令呢?我应该把它们放在哪里?据我所知,命令是用例。但是使用什么CAE呢?域还是应用程序?如果我更改了应用层实现中的某些内容,命令是否也应该更改?还是仅当域要求发生变化时才会影响命令?
如果应用层更改会影响命令,那么命令和应用服务应该存在于同一个项目中。如果他们只会受到域更改的影响,那么他们应该住在另一个项目中作为域的合同,应用层项目将引用合同。话虽如此,如果我们有 Web API 和 MVC 项目,它们都引用了 Contract(命令项目)。
基本上我要找的答案是应用层的文件夹和项目结构是什么?
里面有什么?以及依赖关系。
哪些东西会影响应用层的修改。
非常感谢应用层的具体示例。
【问题讨论】:
-
我会说 Web API / WCF / MVC / Nancy 等......是实现细节/基础设施(又名“框架”)......我会创建一个单独的类库作为应用程序层引用领域层。然后您可以单独对其进行测试并随时更改使用它的框架。我也很想看一些具体的例子..
-
我正在关注 Vernon Vaughn(“实施 DDD”红皮书作者)github.com/VaughnVernon/IDDD_Samples_NET 的代码示例。消息/通知的发布是否仍然是应用层的责任?就像如果我需要与另一个有界上下文对话,可能使用消息队列、RPC 或 REST 发生事件?如果是,那么 AppLayer 是否应该在其层内声明 Interfaces(INotifier, ICache, ILogger) 并让 Dependency Injection 提供您所说的作为基础设施的具体实现?
-
我将接口用于我的应用层服务,仅仅是因为它使它们更容易使用 IoC 容器进行测试和连接。但是您的想法是对的,应用层中的组件是过程粘合剂,不需要为类似的过程换掉。
-
您介意我再次问您在我之前的评论中提出的相同问题吗? “消息/通知的发布是否仍然是应用程序层的责任?就像我需要与另一个有界上下文对话,可能使用消息队列、RPC 或 REST 发生的事件?“我很困惑如何集成有界上下文。示例:如果我想调用其他 BC(跨 BC)在当前 BC 上持久化某些内容之前插入一些记录怎么办。这是 App Layer 的有效用例吗?还是我做错了?
标签: .net asp.net-mvc architecture domain-driven-design