2014-10-06 37 views
0

我正在處理一個需要將一個固定長度的文件反序列化爲一個對象結構的項目。不同數據結構的模式

該文件具有這樣的基本結構:

- 文件頭部數據
-----組
----------細節

通常這將是一個簡單的任務,但是這個特定的文件格式具有大約10個不同的細節記錄子格式。例如,如果詳細信息行以代碼「7」開始,那麼它的格式爲ABC,與格式XYZ(從'8'開始的行)有很大不同的字段。

所以我的問題是,我可能用什麼樣的設計模式來實現這個優雅的方式?

我的第一個想法是使用DetailType枚舉屬性創建通用的詳細類,並且還有一個名爲SpecData的IDetailSpec類型的屬性。 IDetailSpec實際上只是一個標記界面。然後,無論何時使用Detail對象,我都會檢查DetailType屬性,並根據上下文對SpecData屬性執行強制轉換。

但是,這種感覺是錯誤的:) :)

任何想法都歡迎!

+0

您如何存儲數據將取決於您實際需要處理的數據。如果不知道你需要怎樣處理數據,那麼就不能真正做出應該如何存儲數據的明智決定。 – Servy 2014-10-06 16:27:40

+0

您可能需要工廠模式,其中工廠參數是格式類型,並且創建的類型知道如何反序列化特定類型的詳細記錄 – antlersoft 2014-10-06 16:29:47

+0

@Servy所有存儲的數據都將在應用程序中使用,具體取決於上下文手頭的操作。例如,有一個返回細節記錄的概念,所以我們將有一個MarkForReturn()方法,然後更改細節記錄的字段。被更改的字段以及將其更改爲全部的值取決於詳細記錄的格式。換句話說,這些操作很常見,但它們如何實現因格式而異。 – 2014-10-06 16:48:15

回答

1

我會建議做一個基類來處理所有不同的細節類型之間保持相同的字段。 (現在,更改的數據將「反序列化」爲單個字段)。然後,您需要爲每種類型的詳細信息記錄擁有不同的子類,並使用工廠類型模式根據詳細信息創建適當子類的實例行的代碼。每個子類將從基類對象的「詳細數據」字段反序列化。

+0

我很喜歡這個想法。謝謝! – 2014-10-06 17:24:30