gpt4 book ai didi

java - 请批评我通过提供客户状态的验证进行数据导入的方法

转载 作者:行者123 更新时间:2023-11-30 05:08:31 25 4
gpt4 key购买 nike

我正在研究一种 CSV 导入方法,我想将这种方法教给与我一起工作的其他人,我关心以下问题:

  1. 在尝试处理(例如持久化)之前验证每条记录。
  2. 任何记录出现故障都会导致处理失败。
  3. 在验证和处理期间提供状态。

我正在寻找的是关于以下类和用法示例是否足够清晰以满足所描述的意图的想法。

一共有三个类。

导入器:管理整体算法,跟踪验证错误,提供将每个 CSV 行转换为可以验证或处理的数据构造的算法。

Importer(CSVFile)
getProcessor(): Processor
getValidator(): Validator
getErrors(): array
isOKToProcess(): boolean
lineToData(String data): Object

validator :验证整个文件和每一行以确保可以处理

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();

一些具体问题,但请随意批评:

  1. 使用两个单独的类(实际上可能是内部类)进行验证和处理有意义吗?或者也许将所有内容移至一个 Importer 类中?
  2. getErrors() 改为在 validator 中,因为这是引发错误的地方?
  3. currentRow() 在导入器上而不是 validator 和处理器上,因为它确实是整个导入的当前行?

最佳答案

从面向对象的角度来看,我认为将类分开是正确的。我认为甚至没有必要将 Validator 设为内部类。从这个角度思考一下。如果您一般性地实现这一点(也许有一天您可以传入语法或某种规范来告诉 Validator 如何验证),您可以使用它来验证多种类型的 CSV 文件。在这种情况下,您不希望它包含在外部 Importer 类中。否则,您每次都必须编写 Importer/Validator 组合。

Importer 是导入器,Validator 是 validator 。

我肯定会将 getErrors() 方法移至 Validator 中。否则就像别人把你所做的工作归功于你一样。由于 validator 正在执行验证,因此让它告诉世界它发现的错误。不要把荣耀归给Importer,它还没有做任何事情。

你的第三点不太合理。 ValidatorImporter 都有 currentRow() 方法。这似乎是正确的。它们在功能上有所不同,并且都需要跟踪进度。您可以进行的一项更改是为 Validator 提供一个 getTotalNumRows() 方法。这样,一旦文件经过验证,Importer 就可以询问Validator 在验证期间读取了多少行。这将使导入器能够更好地显示进度,即。以百分比形式显示,而不仅仅是显示它在哪一行。

除此之外,我认为你的设计很好。

关于java - 请批评我通过提供客户状态的验证进行数据导入的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4282158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com