c# – 使用域事件模式

前端之家收集整理的这篇文章主要介绍了c# – 使用域事件模式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直试图在udi dahan描述的新项目中实现这种模式.

我喜欢if的想法,但我还不确定它应该在什么情况下应用(这个东西的新东西……).

例如,假设我有一个OnUserCreated事件.我希望其中一位处理程序向用户发送确认电子邮件.但是,如果事件被触发,电子邮件将被发送,然后提交事务时出错并且数据永远不会保存到数据库中.这种模式适用于这种情况吗?我读过人们说不,但是我过去做过的一些项目实际上是这样做的.或者这是我应该只用于加载和更新其他实体的东西……另一方面,我读了有人说,操作所需的关联实体应该已经加载,所以我不应该从数据库加载它们事件.

解决方法

它当然取决于您选择如何实施您的系统.

您可以在此处考虑多个选项:

1.两阶段提交
在进行两阶段提交时,基本上每个处理程序都包含3个方法:一个用于准备,一个用于提交,一个用于回滚.

对于所有事件处理程序,首先调用Prepare.如果这些都没有报告问题,则调用所有处理程序的Commit()方法.如果其中任何一个报告问题 – 尽管Prepare()调用没有报告任何问题 – 那么对于其Commit()已经执行的所有处理程序,您调用它们的Rollback()方法.

2.内部和外部事件处理程序
另一种选择是分离事件处理程序.您可以发布一个事件,例如UserCreated,它由首先参与事务的事件处理程序处理.事件作为事务的一部分存储在DB中.然后,您可以拥有外部事件处理程序,它们只对已存储在数据库中的事件做出反应 – 例如您的电子邮件发件人.这些只能在提交初始事务后调用.

我相信你可以想出更多方法来处理你的具体情况.

猜你在找的C#相关文章