參考

2014-06-18 89 views
0

這是怎樣的一個設計問題:參考

class Suite 
{ 
    List<Plugins> Plugins {get;set;} 
} 

class DataCollector : Plugin 
{ 
    string Property1 {get;set;} 
    string Property2 {get;set;} 

    public void PrintMyName();  
} 

class Measurement: Plugin 
{ 
    string Property1 {get;set;} 
    string Property2 {get;set;} 

    public void PrintMyName();  
} 

現在,我想的類套件可序列化。這裏的問題是這樣的:

  1. XML序列化基本上是用來序列化的DTO類型的對象,所以你基本上是序列化/反序列化狀態的屬性,那就是精細

  2. 這是要序列化的這種特殊類包含Type Plugin(包含包含某些屬性值的屬性組合)+功能主義者。

  3. 這意味着我需要使用工廠來獲取對象的實際實例,使Plugin能夠通過屬性值實現其所有功能。

我在看XMLSrializable + Factory組合嗎?有沒有什麼好的優雅方式來實現這一目標?

+0

什麼是「功能主義」?此外,可能最好不要在MS Word中鍵入您的代碼,其中不應該大寫的關鍵字不幸會大寫。 ('class','public','void'等) –

回答

1

爲什麼不實現IDeserializationCallback接口,所以在反序列化時,您可以通過調用工廠來使對象恢復生命。

我真的不明白你的類的目的,但我會舉一個例子,盡我所能:

public class MyDataClass : IDeserializationCallback 
{ 

    public int SimpleKeyProperty { get; set; } 
    public string TextProperty{ get; set; } 

    public void OnDeserialization(object sender) 
    { 
     //upon deserialization use the int key to get the latest value from 
     //factory (this is make believe...) 
     TextProperty = SomeFactory.GetCurrentValue(this.SimpleKeyProperty) ; 
    } 
} 
+0

我在想把班級分成兩部分DTO +服務。這意味着DTO將被轉儲到XML中,並且服務將被工廠帶到生活中。但需要一種方式來將它們彼此綁定 – TeaLeave

+0

我認爲實現這個接口將允許你這樣做。 –

+0

你能寫出這個接口的藍圖簽名嗎? – TeaLeave