代码之家  ›  专栏  ›  技术社区  ›  orangepips 111111

请批评我的数据导入方法以及提供客户状态的验证

  •  1
  • orangepips 111111  · 技术社区  · 13 年前

    我正在通过一种csv导入方法进行工作,我希望在与我合作的其他人学习以下内容:

    1. 在尝试处理(例如持久)之前验证每个记录。
    2. 任何记录上的失败都会阻止处理。
    3. 在验证和处理过程中提供状态。

    我要寻找的是,如果下面的类和用法示例看起来足够清楚,能够满足所描述的意图,那么我需要考虑一下。

    有三个班。

    进口商 :管理整个算法,跟踪验证错误,提供将每个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();
    

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

    1. 使用两个单独的类(实际上可能是内部类)进行验证和处理是有意义的?或者把所有的东西都转移到一个进口商类中?
    2. getErrors() 而是在验证器中,因为这就是错误产生的地方?
    3. currentRow() 在导入程序而不是验证程序和处理器上,因为它实际上是整个导入的当前行?
    1 回复  |  直到 13 年前
        1
  •  2
  •   Nico Huysamen    13 年前

    Validator CSV Importer

    getErrors()

    currentRow() getTotalNumRows()