我正在尝试找出在我的Asp.net MVC应用程序中放置发送电子邮件的代码的最佳区域。现在,我的应用程序设置在2个VS项目中,将业务层与表示层分开。我正在尝试设置这样一种情况:当用户重置其密码时,在业务逻辑更改密码后,服务器将使用新生成的密码向用户发送一封电子邮件。
我应该调用代码从业务层(在业务层重置密码之后)还是在表示层(在业务层返回成功结果之后)发送电子邮件(包括有关电子邮件外观的数据)?
发布于 2011-04-21 09:20:25
我部分同意BobTodd的观点,因为他建议你把它抽象出来。我(部分地)不同意的唯一部分是关于它在业务层的应用。
发送电子邮件依赖于某种物理实现-并且您不希望将BL绑定到与某些电子邮件提供商相关的外部依赖项。
在一个小项目中,我想你可以将它包含在BL中,以使事情变得简单,但我倾向于将它完全抽象出来,在这种情况下,我会像对待数据访问一样对待它。
在我看来,你可以把它放在两个地方:

注意:自我推广提醒!-摘自我自己的一篇文章:http://morphological.wordpress.com/2011/08/29/5-layer-architecture/
发布于 2011-04-21 06:00:37
发送电子邮件应该是业务层的一部分。
几周前我遇到了同样的问题,我正在使用asp.net MVC3构建一个web应用程序,它由三个项目组成:存储库(DAL),服务(BLL),演示(Web)
我的应用程序逻辑是在服务层实现的,所以我正在寻找在服务层实现一个完全独立的模块的最佳方法,该模块用于将HTML email发送给用户,这样我的服务层功能就可以直接使用它,而不必将它带到表示层。
经过一番搜索,我发现了一个由Kazi Manzur完成的优雅的解决方案,他创建了一个电子邮件子系统,利用Razor视图在web项目之外发送HTML/文本电子邮件。
Use Razor for Email Template outside ASP.NET MVC
从那时起,我一直在使用他的子系统,它一直在做着很好的工作。
发布于 2011-04-21 05:34:17
发送电子邮件不属于表示层,但是可以使用“专用表示层”来确定电子邮件的外观(设计、主题等)。
每个“层”实际上可以由几个独立的程序集组成。
例如,你可以有多个视图。
https://stackoverflow.com/questions/5736885
复制相似问题