我正在通过一种csv导入方法进行工作,我希望在与我合作的其他人学习以下内容:
-
在尝试处理(例如持久)之前验证每个记录。
-
任何记录上的失败都会阻止处理。
-
在验证和处理过程中提供状态。
我要寻找的是,如果下面的类和用法示例看起来足够清楚,能够满足所描述的意图,那么我需要考虑一下。
有三个班。
进口商
:管理整个算法,跟踪验证错误,提供将每个csv行转换为可验证或处理的数据结构的算法。
Importer(CSVFile)
getProcessor(): Processor
getValidator(): Validator
getErrors(): array
isOKToProcess(): boolean
lineToData(String data): Object
验证器
:验证整个文件和每行以确保可以处理
close(): void
currentRow(): int
hasNext(): boolean
doNext(): void
处理器
:每行持续
关闭():无效
currentRow():int
hasNext():布尔值
DONEST():无效
正如您所看到的,最后两个大致遵循Java风格迭代器。因此,客户端交互(psuedocode-假定输出立即刷新到缓冲区):
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();
一些具体问题,但请随意批评:
-
使用两个单独的类(实际上可能是内部类)进行验证和处理是有意义的?或者把所有的东西都转移到一个进口商类中?
-
getErrors()
而是在验证器中,因为这就是错误产生的地方?
-
currentRow()
在导入程序而不是验证程序和处理器上,因为它实际上是整个导入的当前行?