[英]Is It Okay for an Application Layer with a multi-step process to not use the domain layer
我正在使用具有以下层的N层.NET应用程序:
在我的申请中的某个时刻,请求被批准。 批准后,必须执行以下4个步骤:
以上步骤必须是原子操作的一部分,这意味着它们必须全部完成或取消操作。 我正在考虑让应用程序层指导请求存储库和持久层来执行以下任务:
我不确定应用层是否应该这样做。 我认为这是因为前两个操作需要联系存储库,而我避免在域层中这样做。 最后两个步骤涉及域层可以通过依赖项注入实例与之对话的基础结构层。 按照这种逻辑,应用层不会要求域层执行任何操作。 当您具有应用程序层时,对于这样的多步骤过程,通常情况是这样吗? 还是我想念这里的东西?
我知道一个叫做Windows Workflow的框架,但是我不确定在这种情况下是否会有所帮助,因为此多步骤过程不涉及可能需要等待几天的处理步骤所涉及的人机交互。 如果不需要,我也不想使应用程序过于复杂。
提前致谢。
对我来说,您问题中的第1步和第2步听起来像领域逻辑。 所以不,这不好。 这两个步骤应在域中执行。 您可以执行以下操作:
在应用程序服务中,加载相关的聚合(可能是Request
)。
调用对Request
执行第1步和第2步的操作,或者(如果该操作确实不属于Request
)则调用执行这两个步骤的域服务。
域操作完成后,应用程序服务可以将修改后的Request
保存回数据库。
如果上述步骤成功,则可以立即发送电子邮件。 您应该具有某种重试机制,以便即使有暂时性问题,也可以最终发送电子邮件。
如果第二步中的更改修改了一个以上的聚合,则过程将变得稍微复杂一些。 评论中提到的Sagas是解决此问题的一种方法。 尽管如此,单个更改仍是域操作,因此请对其进行建模。
正如plalx在评论中所建议的那样,如果您具有事件基础结构,则可以将电子邮件的发送卸载给域事件使用者。 这通常可以免费解决重试机制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.