gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 02:19:25 25 4
gpt4 key购买 nike

我有一个需求如下:

  1. 从 CSV 文件中读取数据。
  2. 根据传递的键查找重复行。 (例如,CSV 文件有 10 列,我们需要根据特定行查找重复项键)
  3. 拒绝/接受重复行的 boolean 值。
  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();
}

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),它会从存储数据和松散 BulkUploadDataFetcherBulkUploadDataService 之间的耦合。

这两者不会相互了解,并且只能通过 BulkUploadData 实例工作。

关于Java:如何设计一个需要其子级的多个属性来处理文件的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52686967/

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