2012-03-26 79 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庫的依賴性最小。