Java:如何设计一个类,该类需要来自其子类的多个属性来处理一个文件?
我有如下要求:Java:如何设计一个类,该类需要来自其子类的多个属性来处理一个文件?,java,csv,oop,design-patterns,Java,Csv,Oop,Design Patterns,我有如下要求: 从CSV文件读取数据。 根据传递的密钥查找重复行。(例如,CSV文件有10列,我们需要根据特定行查找重复项。) 钥匙) 拒绝/接受重复行的布尔值 单元处理器来验证文件中的每一行 这是一个批量上传数据,我逐行读取文件,根据传递的键查找该行是否有有效数据,该行是否不重复,最后返回一个有效行列表 abstract class BulkUploadService { List<BulkDTO> process(File file) { // Read
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();
}
抽象类BulkUploadService{
列表进程(文件){
//从下面的方法中读取文件和值,这些方法由其子类重写
}
抽象单元处理器[]单元处理器();
抽象布尔isDuplicatesAllowed();
抽象字符串[]头();
抽象字符串rowKey();
}
process()方法需要-文件、行键、CellProcessors、boolean来接受/拒绝重复项,以及其他一些来处理和返回DTO形式的有效行列表。子类将实现BulkUploadService
,并覆盖除process()之外的所有方法,为process()方法提供数据以返回有效列表
我想抽象出来的原因是,
BulkUploadService
应该处理所有业务逻辑,并为具体类返回一个有效列表,具体类应该只关注提供信息。有没有更好的方法来设计这个场景呢?我不太喜欢继承,你在这里使用它
您明确定义了两项职责:
- 处理数据(1)李>
- 收集加工所需的零件(2)
class BulkUploadService{
私有BulkUploadDataCollector;
列出进程(文件){…}
}
接口BulkUploadDataCollector{
CellProcessors[]CellProcessors();
布尔isDuplicatesAllowed();
字符串[]头();
字符串rowKey();
}
如果仔细查看BulkUploadDataCollector
,您会注意到,取回和存储数据的工作已经完成(任务又太多了)
我将编写一个DTO类(比方说BulkUploadData
),它将BulkUploadDataCollector
(现在改名为BulkUploadDataFetcher
)从存储数据中释放出来,并松开BulkUploadDataFetcher
和BulkUploadDataService
之间的耦合
这两个人彼此不了解,只通过
BulkUploadData
实例工作。我没有完全理解这个问题。。。如果定义了CellProcessor来验证数据,为什么不定义另一个CellProcessor来验证重复数据呢?@AnandVaidya可能isDuplicatesAllowed
是调整CellProcessors[]
logicyeah。。再读一遍问题就明白了。@AnandVaidya我们使用CSVBeanReader
读取csv文件中的每一行。使用CellProcessors
是在读取行时验证每一列。如果所有列都有效,我们将创建一个列表或映射,并将此行添加到列表中。isDuplicatesAllowed
的使用不是在已读取带有rowkey
的特定行时添加行,而是删除已添加到列表或映射中的行。我们将最终返回列表
或地图
我希望这一切都清楚了。嘿,安德鲁,谢谢你刚才的漂亮方法。能否请您详细说明一下如何使用BulkUploadData及其结构。我设想,BulkUploadData
是一个POJO类,包含4个字段和相应的访问器方法(尽管该类可能是不可变的)。它的主要用途是在取数器
和服务
之间传输数据Fetcher
有一个生成构造的BulkUploadData
实例的方法,Service
有一个接受此类对象的方法/构造函数。@Bargath我稍后将用代码来说明这个想法
class BulkUploadService {
private BulkUploadDataCollector collector;
List<BulkDTO> process(File file) { ... }
}
interface BulkUploadDataCollector {
CellProcessors[] cellProcessors();
boolean isDuplicatesAllowed();
String[] headers();
String rowKey();
}