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

我有如下要求:

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

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

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

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

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

最佳答案
我不是继承的忠实粉丝,don’t understand why你在这里使用它.

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

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

现在,您的子类应该承担这两项责任,which is not correct.

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

class BulkUploadService {
     private BulkUploadDataCollector collector;

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

interface BulkUploadDataCollector {
     CellProcessors[] cellProcessors();
     boolean isDuplicatesAllowed();
     String[] headers();
     String rowKey();
}

如果仔细检查BulkUploadDataCollector,您会注意到它取决于存储数据(再次执行太多任务).

我会编写一个DTO类(比如BulkUploadData),它将释放BulkUploadDataCollector(现在,重命名为BulkUploadDataFetcher)来存储数据并放松BulkUploadDataFetcher和BulkUploadDataService之间的耦合.

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

转载注明原文:Java:如何设计一个需要子子来处理文件的几个属性的类? - 代码日志