Java:如何设计一个需要子子来处理文件的几个属性的类?

Bar*_*ath 4 java csv oop design-patterns

我有如下要求:

  1. 从CSV文件中读取数据.
  2. 根据传递的密钥查找重复的行.(例如,CSV文件有10列,我们需要根据特定的行键找到重复项)
  3. 拒绝/接受重复行的布尔值.
  4. 单元处理器用于验证文件中的每一行.

这是针对批量上传数据,我逐行读取文件,查找行是否有有效数据,并且根据传递的密钥行不重复,最后返回有效行列表.

abstract class BulkUploadService {
     List<BulkDTO> process(File file) {
       // Read a file and the value from below methods overridden by their child classes
     }

     abstract CellProcessors[] cellProcessors();
     abstract boolean isDuplicatesAllowed();
     abstract String[] headers();
     abstract String rowKey();
 }
Run Code Online (Sandbox Code Playgroud)

方法process()需要 - File,Row key,CellProcessors,boolean来接受/拒绝重复项,还有更多来处理和返回DTO形式的有效行列表.子类将实现BulkUploadService并覆盖除process()之外的所有方法,以便为process()方法提供数据以返回有效列表.

我想抽象出来的原因是它BulkUploadService应该处理所有业务逻辑并返回具体类的有效列表,具体类应该只关注提供信息.有没有更好的方法来设计这种情况?

And*_*lko 5

我不是继承的忠实粉丝,也不明白为什么在这里使用它.

您已明确定义了两项职责:

  • 处理数据(1);
  • 收集加工所需的零件(2).

现在,您的子类应该承担两种责任,这是不正确的.

我建议你为(1)和(2)设计单独的类.

class BulkUploadService {
     private BulkUploadDataCollector collector;

     List<BulkDTO> process(File file) { ... }
}

interface BulkUploadDataCollector {
     CellProcessors[] cellProcessors();
     boolean isDuplicatesAllowed();
     String[] headers();
     String rowKey();
}
Run Code Online (Sandbox Code Playgroud)

如果你仔细检查BulkUploadDataCollector,你会注意到它取决于存储数据(再次有太多的关税).

我会写一个DTO类(比方说BulkUploadData),这将释放BulkUploadDataCollector(现改名为BulkUploadDataFetcher从存储数据)和放松之间的耦合BulkUploadDataFetcherBulkUploadDataService.

这两个人不会彼此了解,只能通过BulkUploadData实例工作.