发送电子邮件是否属于应用程序的表示层或业务层?

Kal*_*exx 6 architecture email asp.net-mvc

我试图找出放置代码以在我的Asp.net MVC应用程序中发送电子邮件的最佳区域.现在我的应用程序设置在2个VS项目中,将业务层与表示层分开.我试图设置一种情况,当用户重置其密码时,在业务逻辑更改密码后,服务器将使用新生成的密码向用户发送电子邮件.

我是否应该调用代码从业务层(业务层重置密码之后)或在表示层(业务层返回成功结果之后)发送电子邮件(包括电子邮件的外观数据)?

Man*_*ous 7

发送电子邮件应该是业务层的一部分.

几周前我遇到了同样的问题,我正在使用asp.net mvc 3构建一个Web应用程序,它包含三个项目:存储库(DAL),服务(BLL),演示文稿(Web)

我的应用程序逻辑是在服务层实现的,所以我正在寻找在服务层实现一个完全独立的模块的最佳方法,用于向用户发送HTML电子邮件,以便我的服务层功能可以直接使用它而无需携带它直到表示层.

经过一番搜索,我找到了一个由Kazi Manzur完成的优雅解决方案,他创建了一个电子邮件子系统,利用Razor Views在Web项目之外发送HTML/Text电子邮件.

在ASP.NET MVC之外使用Razor用于电子邮件模板

从那以后我一直在使用他的子系统,它做得很好.


Adr*_*n K 4

我部分同意鲍勃托德的观点,因为他建议你将其抽象出来。我(部分)不同意的唯一部分是它进入业务层。

发送电子邮件依赖于某种物理实现 - 并且您不希望将您的 BL 与某些电子邮件提供商相关的外部依赖项联系起来。

我想,在一个小项目中,您可以将其包含在 BL 中,以保持事情简单,但我赞成将其完全抽象出来,在这种情况下,我会像对待数据访问一样对待它。

在我的世界观中,你可以把它放在两个地方:

  • 作为一项共享服务,您可能希望从任何地方调用 - 因为它会被抽象出来,所以您可以这样做。
  • 作为/通过“外部服务适配器”,它也是抽象出来的,但只能从 BL 访问 - 这可能反过来暴露任何东西(如 UI)可以调用的方法(如果你真的想的话)。

5层架构

注意:自我推销警报!- 取自我自己的一篇文章:http://morphological.wordpress.com/2011/08/29/5-layer-architecture/