2010-04-08 59 views
3

小設計問題在這裏。我正在嘗試在C#中開發一個計算應用程序。我有一個類,我們稱之爲InputRecord,它包含100個字段(多維數組)。這個InputRecordclass將用於許多CalculationEngines中。每個CalculcationEngine可以更改InputRecord中的多個字段。這些更改是計算所需的步驟。在c中使用readonly類的設計#

現在我不希望在其他CalculcationEngine的類中使用對InputRecord進行的本地更改。

想到的第一個解決方案是使用結構:這些是值類型。不過,我想使用繼承:每個CalculationEngine都需要一些與該引擎相關的字段:它具有基於BaseInputRecord的自己的InputRecord。

任何人都可以指出我的設計,這將幫助我完成這一任務嗎?

回答

2

如果您確實擁有大量數據,則使用結構或常用克隆技術可能不會非常節省空間(例如,它會佔用大量內存)。

聽起來像一個設計,你需要有一個「主存儲」和一個「差異存儲」,就像你有數據文件和事務的RDBMS一樣。

基本上,您需要保留每個計算引擎所執行更改的列表,並將主值用於不受任何更改影響的項目。

+0

有趣。我會考慮這個 – edosoft 2010-04-08 10:01:59

1

您可以在BaseInputRecord上聲明Clone()方法,然後將副本傳遞給每個CalculationEngine。

+0

克隆似乎是一個好主意,你將有原始記錄不變,其他計算引擎將有單獨的副本。 – 2010-04-08 09:25:00

+0

我曾考慮過克隆,但字段數量讓我無法使用此策略 – edosoft 2010-04-08 10:01:01

2

優雅的解決方案是而不是更改輸入記錄。這將允許共享(和並行處理)。如果這不是一個選項,你將不得不克隆數據。爲每個派生類提供一個將基本Input作爲參數的構造函數。