2013-06-29 24 views
0

我必須使用政府提供的有時以奇怪方式破壞的數據。我的代碼已經包含片段,如:管理變通辦法的最佳做法(對於損壞的數據)

for row in governmental_data: 
    # XXX Workaround for that one row among thousands 
    # that was mislabeled by a clerk and will not be fixed 
    # before form A-320-Tango-5 is completed and submitted 
    # on the first Sunday after a solstice. 
    if row is the_spawn_of_satan: 
     row = fix_row_A320(row) 
    # XXX end of workaround 
    process_row(row) 

該錯誤之前只是

for row in governmental_data: 
    process_row(row) 

我不能與應用的修正數據的鏡像,因爲數據是動態的。

隨着數量的增長,我能做些什麼來管理這些變通辦法?是否有任何最佳實踐(除了「不提供破碎的數據開始」)?

+0

實際數據混亂。所以A)採用預處理和過濾技術 - 通常可以跳過破損的記錄 - 或者B)使用對數據中的這種錯誤有效的算法。 –

回答

1

我建議使用Decorator Design Pattern來處理這個數據轉換問題。 Wikipedia page 有一個咖啡製作的例子。以同樣的方式,我建議每個數據轉換都應該是裝飾器,它需要一行,並對其進行一些操作並返回一行。這種設計模式已經很成熟。攔截過濾器設計模式與在java(servlet filters)和.net(Asp.Net Mvc Filters)中實現的此想法類似。

你的代碼應該如下

listOfDataConversionFilters = [XXXWorkaround,formA_320Tango5,...] 
for row in governmental_data: 
    for filter in listOfDataConversionFilters 
     filteredRow = filter(row) 
    process_row(filteredRow) 
+0

應允許過濾器跳過行恕我直言。 –