【发布时间】:2016-02-07 21:48:39
【问题描述】:
我正在开发具有以下层的 N 层 .NET 应用程序:
- 演示文稿
- 应用
- 域
- 基础设施(包含持久性和电子邮件等常用实用功能)
在我的申请中,某个请求被批准了。一旦获得批准,必须执行以下 4 个步骤:
- 在请求中为发布的产品分配产品标签代码。
- 将请求状态从“正在处理”更新为“订单已完成”
- 向请求者发送一封电子邮件,说明他们的产品已准备就绪 取货
- 向请求者的经理发送一封电子邮件,告知他们什么 已向其员工提供了一份他们的请求副本 产品获批
上述步骤必须是原子操作的一部分,这意味着它们必须全部完成,否则操作将被取消。 我正在考虑让应用层指导请求存储库和持久层执行以下任务:
- 请求存储库执行的应用层请求 将第 1 步和第 2 步作为工作事务单元
- 基础设施层的应用层请求 执行步骤 3 和 4。
我不确定应用层是否应该这样做。我认为这是因为前两个操作需要联系我在域层中避免做的存储库。最后两个步骤涉及基础设施层,域层可以通过依赖注入实例与之对话。按照这个逻辑,应用层并不要求领域层做任何事情。当你有一个应用层时,这通常是这样的多步骤过程吗?还是我在这里错过了什么?
我知道一个名为 Windows Workflow 的框架,但我不确定这在这种情况下是否会有所帮助,因为这个多步骤过程不涉及处理步骤中的人机交互,而事情可能会等待几天。如果没有必要,我也不想让应用程序过于复杂。
提前致谢。
【问题讨论】:
-
在这种情况下,您可能正在寻找 Saga,因为您似乎有 2 个不同的聚合,
Product和Request。 -
感谢您的问题识别。看起来我错过了陈述的情况。有一个产品表,其中仅包含每个唯一可用产品的记录。在这种情况下,只能请求 4 种可能的手机型号。请求完成后,将使用发布的手机型号和产品标签代码进行更新。产品记录不更新。如果这 4 个步骤由应用层执行,问题仍然存在。我将重申第一步。我还将产品存储库更改为请求存储库。
-
那么您可以简单地将整个过程放在应用程序服务中。应用程序服务旨在协调业务流程。只需从存储库中加载
RequestAR,在其上调用业务操作,将其保存回来并在交易完成后发送电子邮件。如果您实现了域事件,您还可以在事件订阅者中发送电子邮件。
标签: .net domain-driven-design workflow-foundation-4 n-tier-architecture application-layer