我正在使用 asp.net Mvc 5 开发一个多租户 n 层 Web 应用程序。
在我的服务层中,我为每个重要操作定义自定义事件,并在执行这些操作后引发这些事件。例如
Public event EventHandler EntityCreated;
Public void Create(Entity item) {
Save(item);
......
EntityCreated(this, item);
}
我打算将业务规则和通知与这些事件联系起来。我想使用事件的主要原因是逻辑的解耦以及更多事件处理程序的轻松可插入性,而无需修改我的服务层。
问题:在 ASP.NET 中使用事件和委托有意义吗?
我在网上找到的大多数示例都是针对 win 表单或 wpf。当涉及到多线程应用程序时,我获得了优势。还有每个表单定义一次事件并且在表单的整个生命周期内都处于活动状态。
但就我而言事件将根据 http 请求进行。那么定义这些事件是一种开销吗?
正如其他人指出的那样,发布/订阅或事件总线是一种解决方案。另一个解决方案类似于您在这里尝试做的事情,但使其更加正式。
我们来看一个创建客户的具体例子。您希望在应用程序中创建新客户时发送欢迎电子邮件。该域应该只关心创建客户并将其保存在数据库中,而不关心所有其他详细信息,例如发送电子邮件。因此,您添加了一个 CustomerCreated 事件。这些类型的事件称为领域事件,而不是用户界面事件(例如按钮单击等)。
当引发 CustomerCreated 事件时,应该在代码中的某个位置对其进行处理,以便它可以执行所需的操作。您可以像您提到的那样使用 EventHandlerService (但这很快就会涉及太多事件)或使用以下模式:乌迪·达汉谈论.我已经成功地将 Udi 的方法与许多 DI 容器一起使用,该模式的优点在于您的类保持 SRP 兼容。您只需使用反射在应用程序引导时实现特定的接口和注册代码。
如果您需要有关此主题的进一步帮助,请告诉我,我可以与您分享代码片段以使其正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)