2012-05-11 39 views
1

我有一個類下面寫有映射與Web服務響應消息。DTO /域對象的最佳實踐或模式

public class someclassA 
{ 
    public int properyA {get;set;} 
    public int properyB {get;set;} 
    public int properyC {get;set;} 
    public int properyD {get;set;} 
} 

public class someclassB 
{ 
    public int properyX {get;set;} 
    public int properyY {get;set;} 
    public int properyZ {get;set;} 
} 

現在需要的是someClassA應該使用someClassB中的一些屬性並添加3個更多的caculated屬性,例如財產E,財產F,財產G等

關於模式的問題是我應該創建完全不同的someClassAB具有來自someClassA和3個新的所有屬性,或者我應該建立與所有這些additinal領域的someClassA在第一位?

乾杯。

+2

如果B中的所有屬性也存在於A中,則最好使用繼承來處理。 – lsuarez

+0

同意lthibodeaux。模式必須讓我們的生活更輕鬆。是DTO必須是具有簡單屬性的普通對象,但是對於我來說這是最好的解決方案 –

+0

問題已更新,classB中的屬性完全與ClassA不同 –

回答

2

這是要記住的規則。如果A「是」B,則使用繼承。否則,使他們分開的對象。只有在子類真正是父類的更具體形式的情況下,才應該使用繼承。

認爲維護。當將來物體越來越分散時會發生什麼?現在,只有在特定環境下20%的屬性纔有意義的情況下才使用類型。

更不用說,如果您在不相關的實體之間有明確的界限,那麼您的代碼將更具可讀性。每當你向圖片中拋出繼承,你就有更多的「上下文」在閱讀代碼時必須跟上。如果你混合了對象(坦白地說懶惰),代碼的可讀性會受到影響。

+0

應該有另一個類包含View所需的ClassA和額外屬性的所有屬性,然後? –

+0

這取決於你的實體實際是什麼。你可以去任何一個方向。如果B是不同類型的A,那麼我會使用繼承。如果它們彼此沒有關係,則創建一個單獨的對象。不要僅僅爲了「借用」屬性而使用繼承。 –

+0

現在,如果B類是帶有一些計算字段的類A的「視圖」,我傾向於將它們作爲getter屬性放在類A上(因爲視圖仍然是相同的類型)。 –