我通過CSV導入的方式工作,我想教給其他人,我有我的看法有以下其中工作方法:請批判我的數據導入與驗證,提供客戶端狀態
- 在嘗試處理之前驗證每條記錄(例如持續)。
- 任何記錄上的故障都會阻止處理。
- 在驗證和處理期間提供狀態。
我在尋找的是如果下面的類和用法例子看起來足夠清晰以符合所描述的意圖的想法。
有三個類。
導入程序:管理整體算法,跟蹤驗證錯誤,提供將每個CSV行轉換爲可以驗證或處理的數據結構的算法。
Importer(CSVFile)
getProcessor(): Processor
getValidator(): Validator
getErrors(): array
isOKToProcess(): boolean
lineToData(String data): Object
驗證:驗證整個文件,每一行,以保證它的確定處理
close(): void
currentRow(): int
hasNext(): boolean
doNext(): void
處理器:堅持每行
close(): void
currentRow(): int
hasNext(): boolean
doNext(): void
正如你可以看到最後兩個大致堅持一個Java風格的迭代器。因此,客戶端交互(僞碼 - 假定輸出立即刷新到緩衝區):
importer = new Importer("/path/to/file.csv");
validator = importer.getValidator();
writeOutput("validating<br/>");
while (validator.hasNext()) {
validator.doNext();
writeOutput(validator.currentRow() & "<br/>");
}
validator.close();
if (!importer.isOKToProcess()) {
writeOutput("errors<br/>");
writeOutput(importer.getErrors());
return; // short circuit
}
processor = importer.getProcessor();
writeOutput("processing<br/>");
while(processor.hasNext()) {
processor.doNext();
writeOutput(processor.currentRow() & "<br/>");
}
processor.close();
一些具體的問題,但請隨時否則批判:
- 意義的使用兩個獨立的類(實際上可能是內部的)來驗證和處理?或者可能將所有內容都移入一個Importer類中?
getErrors()
取而代之,因爲那是錯誤發生的地方?currentRow()
對導入器而不是驗證器和處理器,因爲它確實是整個導入的當前行?
隨時批評我的批評:) – 2010-11-26 05:48:04