我必须使用政府提供的数据,这些数据有时会以奇怪的方式被破坏。我的代码已包含以下代码段:
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 :(得分: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)