2011-10-16 51 views
2

在我目前的項目中,我有很多對象需要堅持到XML並在運行時膨脹。我一直在通過.NET的DataContracts進行管理。我現在正在做的是創建一個單獨的類,它代表我正在序列化的對象,並將這些對象從光盤讀取/寫入,以避免在單個類中承擔過多的責任。這裏有一個例子:誰應該負責膨脹數據對象?

public class Range 
{ 
    private float _min; 
    private float _max; 

    public float Min { get { return this._min; } } 
    public float Max { get { return this._max; } } 

    // Constructrs & Methods... 

    public SerializedRange GetAsSerializable(); 
} 

Range類有免費類:

[DataContract] 
public class SerializedRange 
{ 
    [DataMember] 
    public float Min; 

    [DataMember] 
    public float Max; 

    // Constructor... 
} 

那麼我的問題是,誰應該負責實際拍攝對象的序列化版本,它膨脹到實際對象?我看到三個選項,但我不知道它(如果其中任何一個)將是最好的:

  1. 給這個對象吐出充氣實例的實例方法的序列化版本,利用現有的構造函數/姐妹班的工廠。
  2. 給妹妹類一個工廠,它需要一個序列化版本的實例來構建它自己。
  3. 不要有任何的類或它的序列化對口做任何東西 - 有在序列化對象讀取手動使用,他們會定期有什麼構造函數/工廠創建規則對象的代碼。

我認識到,在某些情況下,你不得不做的一種方式或其他,因爲這個有點人爲的例子以外的約束。既然還有更多的方法可以做到,我真正需要的是一個通用的經驗法則,可以產生整潔,可讀和可擴展的代碼。

回答

2

如果「破解」你申請到的組成部分,你會得到什麼邏輯組件?這裏有一些基於我的理解:

  1. 域對象(數據要存儲)
  2. 數據層 - 負責持久化數據(和檢索它)

和其他許多(但剛剛拍攝的一個子集,按您的描述)

現在,數據層的任務是將內容寫出來,希望一些存儲 - XML文件到磁盤你的情況。

現在,當你「查詢」誰獲取它的文件嗎?數據層。誰應該填充相應的域對象?那麼數據層本身。

如若數據層「代表」人民的責任,一個單獨的類/工廠?這取決於它是否會被別人重複使用。如果沒有,像內部類的概念可以有很好的幫助(它們存在於Java世界中,不確定它在C#.NET中是否相同)。這樣你就可以將它模塊化爲一個特定的類,除非你想這樣,否則這個類對其他類是不公開的。

如果你去工廠?是的你可以。但要確保這樣做在邏輯上是正確的。您可以使用許多對象充氣機 - 可以將通脹功能隔離爲一個類,並且工廠本身可以成爲數據層的一部分(如果您想要這樣做)。

一旦你描述了這些問題,你就可以更好地決定把代碼片放在哪裏。我提供了一些可以派上用場的指針。

希望它有幫助...

+0

謝謝,你肯定給了我一些想法。雖然我不經常使用它們,但我確信C#支持內部類。 – Wells