Bar*_*ath 4 java csv oop design-patterns
我有如下要求:
这是针对批量上传数据,我逐行读取文件,查找行是否有有效数据,并且根据传递的密钥行不重复,最后返回有效行列表.
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应该处理所有业务逻辑并返回具体类的有效列表,具体类应该只关注提供信息.有没有更好的方法来设计这种情况?
您已明确定义了两项职责:
现在,您的子类应该承担两种责任,这是不正确的.
我建议你为(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从存储数据)和放松之间的耦合BulkUploadDataFetcher和BulkUploadDataService.
这两个人不会彼此了解,只能通过BulkUploadData实例工作.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |