Tag: 域事件

寻找域事件的示例

有没有人知道在哪里可以找到域事件实现的示例代码,如Udi Dahan在Domain Events – Salvation中所描述的那样?

具有持久性无知对象的持久性和域事件

我一直在研究域驱动设计和域事件 。 我非常喜欢这些事件提供的关注点的分离。 我遇到了持久化域对象和提升域事件的问题。 我想在域对象中引发事件,但我希望它们是持久性无知的。 我用这个Checkout方法创建了一个基本的ShoppingCartService : public void Checkout(IEnumerable cart, Customer customer) { var order = new Order(cart, customer); _orderRepositorty.Add(order); _unitOfWork.Commit(); } 在此示例中, Order的构造函数将引发OrderCreated事件,该事件可由某些处理程序处理。 但是,我不希望在实体尚未持久化或以某种方式持久化失败时引发这些事件。 为了解决这个问题,我想出了几个解决方案: 1.提升服务中的事件: 我可以在服务中引发事件,而不是在域对象中引发事件。 在这种情况下, Checkout方法将引发OrderCreated事件。 这种方法的一个缺点是,通过查看Order域对象,不清楚哪些事件是由哪些方法引发的。 此外,开发人员必须记住在其他地方创建订单时提出事件。 感觉不对劲。 2.队列域事件 另一种选择是对域事件进行排队,并在持久成功时引发它们。 这可以通过using语句来实现,例如: using (DomainEvents.QueueEvents()) { var order = new Order(cart, customer); _orderRepositorty.Add(order); _unitOfWork.Commit(); } QueueEvents方法会将布尔值设置为true ,而DomainEvents.Raise方法会将事件排队,而不是直接执行它。 在QueueEvent的dispose回调中,执行排队事件,确保已经发生了持久化。 这似乎相当棘手,它需要服务知道域对象中引发了哪个事件。 在我提供的示例中,它也只支持一种类型的事件,但是,这可以解决。 3.坚持域名活动 […]