问题描述
我有一个具有多层的 .NET 5 应用程序:Web、应用程序、域和基础设施。到目前为止,我一直在尝试将每一层之间的关注点分开,并使依赖项向内指向 Web(基础设施 -> 应用程序 -> Web)。
我现在发现自己需要从应用程序层发送多封电子邮件,其中包含指向特定页面的链接,我更喜欢使用来自 Web 层的 Url.Action(action,controller,params)
助手之类的东西而不是硬编码来动态构建这些电子邮件域或路径,但这意味着应用层将了解 Web/表示问题。
导致发送电子邮件的流程如下:
我可以在命令中添加一个字段(例如 BaseURL),以便控制器可以在将命令发送到应用层之前设置它,但这似乎是错误的,因为它不是传入请求的一部分,我需要传播它通过几个与它无关的处理程序,只是因为最后它可能被最终处理程序使用。
有没有更好的方法来解决这个问题?我是否应该在 Web 层中使用 MediatR 处理程序来处理这些情况?
解决方法
如果 web == http(s),这不是 web 的问题。它绝对不是应用程序逻辑的一部分。
电子邮件生成代码,如 http 响应生成代码是在用例中使用您的公共 API 的客户端代码。
您只需要一个新模块,也许该模块可以通过例如实现Apache Camel 或类似电子邮件发送的问题已经解决。
Web 和电子邮件模块可能共享一个企业(工作流)实体,该实体描述系统中的 url。我已经成功地使用 interface==folder 和 class==page 定义了该实体,并做了一个内部类的嵌套结构。放置在任何节点上的注释都可以控制例如安全。
可以在运行时解析结构以方便使用。我会去这样一个共享的实体,并且为模块进行更改的一个原因。