事件中的非原始类型

时间:2012-03-26 13:41:59

标签: events cqrs

在处理事件时,人们通常会采用仅由基元组成的非常简单的值对象的示例。 但是我需要更多信息的事件呢?是否允许创建特定的结构来处理这些情况?

namespace Events {
    public class BlueTrainCleaned
    {
         Datetime start
         Datetime end
         Carriage[] Carriages
    }

    public class Carriage
    {
         string Descrizione
         int Quantity
    }
}

Carriage类是事件命名空间的一部分,没有任何复杂的逻辑或任何东西。

但如果我有另一个事件:

public class RedTrainCleaned
{
     Datetime start
     Datetime end
     Carriage[] Carriages
}

马车也将成为第二个赛事界面的一部分。如果让我们说40或50事件具有相同的"事件值对象",这意味着我的项目将严重耦合在此对象上。它对我来说看起来不太好,但我能做些什么来避免这种情况呢?是否警告我的域名分析中的某些内容做得不好?

感谢您的帮助,

2 个答案:

答案 0 :(得分:1)

我想这取决于您的域中标准Carriage的标准。如果一个事件发生了变化,那么其他事件也会发生变化吗?

我想我会想到Address的例子。它在域中非常标准,如果我提出包含地址信息的事件,我认为在我的事件对象中包含它是有意义的。这样,如果知道我们需要对我的邮政编码添加ZIP + 4扩展名,我可以向我的Address类添加一个新字段,并将该属性用于将来的事件。我可以在一个地方进行更改,并将其用于未来的活动。

如果Carriage可能意味着不同事件的不同之处,那么可能不是您应该包含的内容 - 而是在您的活动中将其展平。但如果Carriage确实是您域内无处不在的定义,那么我认为可以将它包含在您的事件类中。

听到它可能令人沮丧,我认为它真的“取决于”。

我希望这会有所帮助。祝你好运!!

答案 1 :(得分:0)

可以创建单独的类库项目以包含消息类(DTO)。理想情况下,该项目应该不依赖于解决方案的其他项目,它应该只包含可序列化的POCO。 在这种情况下,依赖性最小,因为您只需要共享DTO库。

相关问题