2017-05-22 45 views
0

我有一個平面文件包含人「記錄」,我從服務提供商獲得。每個記錄實際上都是記錄列表。 文件中的每一行表示具有給定類型的記錄。 人員記錄始終包含類型'001'和'099',代表人員的開始和結束記錄。其他記錄根據「事件」添加到人員條目中。因此,記錄是基於給定事件建立的。如何選擇一個設計模式,當你的客戶的要求仍然有點朦朧

例子。

000 # Start of doc. 
001 # Person begin. 
... 
n Records (n > 001 && n < 099) 
... 
099 # Person end. 
001 # Person begin. 
... 
n Records (n > 001 && n < 099) 
... 
099 # Person end. 
001 # Person begin. 
... 
n Records (n > 001 && n < 099) 
... 
099 # Person end. 
999 # End of doc. 

除了每行上的記錄類型,還有其他數據包含在固定位置。實際開始記錄的

0010308952872   01000000000000 K1995-03-01 

我的做法,到目前爲止,是定義每種類型的記錄的.XSD與使用架構綁定類。我的問題是,根據事件類型,對於哪些類型的記錄是相關的,仍然沒有要求。我只需拿一部電話打電話給負責人,但是爲公共部門工作使得計劃成爲一個b ****。

有沒有人有任何建議,哪種軟件模式可以堅持最這種類型的問題陳述?任何分享的經驗將不勝感激:}

回答

0

如果我理解你正確,你有不同類型的記錄和記錄列表可能會隨着時間的推移而增長/變化。我的第一個想法是編碼到一個接口 - 抽象的細節,以便您的應用程序的大部分不受底層數據結構的變化影響。

我會嘗試通過使用類似與工廠模式相結合的策略模式來實現此目的。也許創建一個ReadStrategyFactory,它可以根據記錄類型返回不同的ReadStrategy實現。

下面是一篇關於戰略和工廠模式主題的文章 - 這可能是相關的。

0

如果僅僅是抽象記錄對象狀態的問題。然後創建一個抽象複合類型來表示任何記錄類型。這也可以用作在複合設計模式中使用的通用接口類型。這使您可以迭代幾乎任何類型的數據結構,並將不同類型作爲常見組合處理。搜索GOF或其他複合設計模式。如果我正確理解你的話。 https://sourcemaking.com/design_patterns/composite 這裏有一個來源。對不起,原始鏈接。我在iPhone上。

P.S.我想我應該澄清,這假設你正在填充一些數據結構,當平面文件被讀取。

0

我的建議是嘗試使用Factory的策略模式。這github link是一個簡單的例子創建自己。

從項目: -

文件讀取器解決方案是能夠讀取不同類型的文件結構。閱讀BookListApp項目中的FileReader_Task.docx,以瞭解此解決方案的問題(用戶故事)。

希望這會有所幫助。

0

雖然練習和思考設計模式非常好,我當然鼓勵你學習它們。我不會推薦通過考慮哪種設計模式可以解決它們的問題來解決問題。

讓他們置身於您的想法背後,而是嘗試着眼於您試圖解決的實際問題,並在找到代碼氣味並且需要它們時應用模式。否則,你可能會結束過度工程或使事情複雜化。 YAGNIRefactoring Patterns可能值得一讀。

至於你的問題,複合或戰略模式可能是合適的,或者可能是不同模式的組合,但如上所述,我會建議解決問題,然後如果你發現代碼的氣味重構使用適當的模式。

這些網站都具有很好的例子,是一個很好的參考:tutorialspointsourcemaking

相關問題