域事件如何返回数据?

时间:2014-10-19 13:23:26

标签: dns domain-driven-design

我正在制作网络服务,并希望将域模式应用于此。我在使域名实体有更多行为时遇到问题。我想做这样的事情

    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; }
}

所有方法都有利弊,但我最喜欢使用域名事件。但是,如何使用域事件返回值?如果方法在事务中,你如何处理回滚?

或者域名活动实际上只是用于通知(火灾和遗忘)......

1 个答案:

答案 0 :(得分:2)

根据我的理解和实践,域事件已经发生。 (在我们的惯例中,事件名称始终是过去时态)。发布域事件只是“让全世界都知道”事情发生了。然后,任何事件监听器都会相应地执行操作,而不管是什该事件包含发生的事情的信息它不会返回任何内容。

因此,无法回滚域事件。触发的侦听器内的事务可以回滚,但不能回滚事件本身。

编辑:就像你提到的那样 - 开火并忘记。