2012-03-26 83 views
3

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

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事件具有相同的“事件值对象”,这意味着我的项目将与此对象紧密耦合。它看起来不太好,但我能做些什么来避免这种情况?这是一个警告,说我的域名分析工作做得不好吗?

感谢您的帮助,

回答

1

我想这取决于标准Carriage是如何在您的域名。如果它改变了一个事件,它是否应该改变其他的事件?

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

如果Carriage可能意味着不同事件之间有所不同,那么也许这不应该包括 - 而是在事件中将其展平。但是,如果Carriage真的是一个在你的域中无处不在的定义,那么我认为将它包含在你的事件类中是很好的。

尽管听起来可能令人沮丧,但我认为它确实“取决于”。

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

+0

确实在我的域名中,Carriage将是“标准”地址。我感到困惑,从不同的角度看事物是件好事。一个单词如何可以让所有的事情时时刻刻都变得有趣。谢谢。 – Arthis 2012-03-27 19:09:00

0

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