加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用域事件模式

发布时间:2020-12-15 08:27:33 所属栏目:百科 来源:网络整理
导读:我一直试图在udi dahan描述的新项目中实现这种模式. 我喜欢if的想法,但我还不确定它应该在什么情况下应用(这个东西的新东西……). 例如,假设我有一个OnUserCreated事件.我希望其中一位处理程序向用户发送确认电子邮件.但是,如果事件被触发,电子邮件将被发送,
我一直试图在udi dahan描述的新项目中实现这种模式.

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

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

解决方法

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

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读