Domain driven design 基于消息的域对象协作

Domain driven design 基于消息的域对象协作,domain-driven-design,Domain Driven Design,最近,我在考虑如何使用消息来实现域对象协作。现在我有了一些想法: 如果每个域对象想要响应一条消息,它将实现一个接口 每个域对象将不依赖于任何其他域对象,这意味着我们将不具有Model.OtherModel关系 每个域对象只做只修改自身的事情 每个域对象都可以发送一条消息,关心此消息的任何其他域对象都将接收此消息 总之,域对象之间协作的唯一方式是消息,一个域对象可以发送任何消息或接收任何消息,只要它需要 当我学习Evans的DDD时,我看到他在域中定义了聚合概念,我认为聚合是静态的,不适合对象交互

最近,我在考虑如何使用消息来实现域对象协作。现在我有了一些想法:

  • 如果每个域对象想要响应一条消息,它将实现一个接口
  • 每个域对象将不依赖于任何其他域对象,这意味着我们将不具有Model.OtherModel关系
  • 每个域对象只做只修改自身的事情
  • 每个域对象都可以发送一条消息,关心此消息的任何其他域对象都将接收此消息 总之,域对象之间协作的唯一方式是消息,一个域对象可以发送任何消息或接收任何消息,只要它需要

    当我学习Evans的DDD时,我看到他在域中定义了聚合概念,我认为聚合是静态的,不适合对象交互,他只关注对象的静态结构或对象之间的关系。在现实世界中,对象将使用消息进行交互,而不是通过相互引用或聚合其他对象。在我看来,所有对象都是平等的,这意味着它们不会依赖于任何其他对象。 关于如何实现发送消息或接收消息的功能,我认为我们可以创建一个专门用于域对象协作的EventBus框架。我们可以将事件类型映射到字典中的订户类型。键为事件类型,值为订户类型列表。当引发一个事件时,我们可以找到相应的订阅服务器类型,并从数据持久性中获取所有订阅服务器域对象,然后在每个订阅服务器上调用相应的句柄方法

    例如:

    public class EventA : IEvent { }
    public class EventB : IEvent { }
    public class EventC : IEvent { }
    
    public class ExampleDomainObject : Entity<Guid>{
        public void MethodToRaiseAnExampleEvent()
        {
            RaiseEvent(new EventC());
        }
    }
    public class A : Entity<Guid>, IEventHandler<EventB>, IEventHandler<EventC> {
        public void Handle(EventB evnt)
        {
            //Response for EventB.
        }
        public void Handle(EventC evnt)
        {
            //Response for EventC.
        }
    }
    public class B : IEventHandler<EventA>, IEventHandler<EventC> {
        public void Handle(EventA evnt)
        {
            //Response for EventA.
        }
        public void Handle(EventC evnt)
        {
            //Response for EventC.
        }
    }
    
    公共类事件a:IEvent{}
    公共类事件B:IEvent{}
    公共类事件C:IEvent{}
    公共类ExampleDomainObject:实体{
    public void MethodToRaiseAnExampleEvent()
    {
    RaiseEvent(新事件c());
    }
    }
    公共A类:实体,IEventHandler,IEventHandler{
    公共无效句柄(EventB evnt)
    {
    //对事件B的响应。
    }
    公共无效句柄(EventC evnt)
    {
    //对EventC的响应。
    }
    }
    公共B类:IEventHandler,IEventHandler{
    公共无效句柄(EventA evnt)
    {
    //对事件的回应。
    }
    公共无效句柄(EventC evnt)
    {
    //对EventC的响应。
    }
    }
    
    这就是我的想法。希望听到你的话。

    你听说过或吗

    听起来这就是你思想的方向

    外面有很多人。许多关于和的好博客帖子

    有些是可用的,并且有一个可以讨论实现细节的平台