我正在制作网络服务,并希望将域模式应用于此。我在使域名实体有更多行为时遇到问题。我想做这样的事情
public void DoSomethingApi()
{
CustomerRepository customerRepository = new CustomerRepository();
Customer customer = customerRepository.GetCustomer("myId");
customer.DoSomething();
}
让我的客户实体有更多行为我尝试了以下内容:
public class Customer
{
public void DoSomething()
{
// how do I do this?
// I need a repository and a bunch of services todo work here
}
// using double dispatch
public void DoSomething1(DoSomethingService service)
{
service.DoSomething();
}
// using domain services directly
public void DoSomething2()
{
new DoSomethingService().DoSomething();
}
// using event broker and domain events
public void DoSomething3()
{
EventBroker.FireEvent<DoSomethingEvent>();
}
// using Actions
public Action DoSomethingAction4 { get; set; }
}
所有方法都有利弊,但我最喜欢使用域名事件。但是,如何使用域事件返回值?如果方法在事务中,你如何处理回滚?
或者域名活动实际上只是用于通知(火灾和遗忘)......
答案 0 :(得分:2)
根据我的理解和实践,域事件已经发生。 (在我们的惯例中,事件名称始终是过去时态)。发布域事件只是“让全世界都知道”事情发生了。然后,任何事件监听器都会相应地执行操作,而不管是什该事件包含发生的事情的信息它不会返回任何内容。
因此,无法回滚域事件。触发的侦听器内的事务可以回滚,但不能回滚事件本身。
编辑:就像你提到的那样 - 开火并忘记。