我有一个应用程序所需的小组件。该组件加载 csv 文件,然后根据找到的数据更新客户记录。每个客户更新都会有一个 csv 文件。
- 检查 csv 文件的文件位置
- 对于找到的每个 csv 文件,加载该 csv 文件,对其进行解析并使用任何更新的数据更新客户数据
就是这样。
但是,我在几种方法之间犹豫不决。
- 有一个 Updater() 类可以完成所有工作。
- 有一个 Update() 类,它表示加载的 csv 数据,它知道如何解析 csv 等,然后还有一个 Updater() 类,负责更新客户记录。 Update() 类将有一个 Updater()
以下哪一个是正确的解决方案,或者还有其他更好的解决方案吗?
最佳答案
如果您正在考虑真正的总体设计,请考虑以下因素:
- 类
UpdateSet
:更新列表。如果需要,可以提供 CSV 文件。 - 接口(interface)
UpdateInstance
:从请求的角度来看,不同类型的更新。如果需要,可以使用 CSV 行。 - 类
InsertInstance
:实现UpdateInstance
。插入请求。 - 类
DeleteInstance
:实现UpdateInstance
。删除请求。 类
ChangeInstance
:实现UpdateInstance
。更新请求。接口(interface)
UpdateSetBuilder
:从某处生成UpdateSet
。- 类
CSVUpdateSetBuilder
:通过读取CSV文件实现UpdateSetBuilder
。可能是一个单例对象。 - 接口(interface)
UpdateParser
:获取 CSV 行并生成UpdateInstance
(或拒绝它)。 - 类
InsertParser
:实现UpdateParser
。可能是一个单例对象。检测并解析插入请求。 - 类
DeleteParser
:实现UpdateParser
。可能是一个单例对象。检测并解析删除请求。 - 类
ChangeParser
:实现UpdateParser
。可能是一个单例对象。检测并解析更新请求。
不同的 UpdateParser
注册到 CSVUpdateSetBuilder
中,并通过委托(delegate)机制进行选择(即,每个更新解析器依次获得识别记录的机会,如果返回 null,下一个 UpdateParser
将有机会)。
- 类
Updater
:获取CustomerRecords
集合并对其应用UpdateSet
。 - 接口(interface)
UpdateTypeDoer
:从执行的角度来看,不同类型的操作。 - 类
InsertDoer
:实现UpdateTypeDoer
。检测InsertInstance
对象并将其应用于数据。 - 类
DeleteDoer
:实现UpdateTypeDoer
。检测DeleteInstance
对象并向数据应用删除请求。 - 类
ChangeDoer
:实现UpdateTypeDoer
。检测ChangeInstance
对象并向数据应用更新请求。
不同的 UpdateTypeDoer
向 Updater
注册,并通过委托(delegate)机制进行选择(即,如果返回 null,下一个 UpdateTypeDoer
将有机会)。
优点:非常灵活,并且易于演进和修改(添加新的数据源、更新类型等)。 缺点:在设计和实现时间方面的大量投资可能永远不会得到返回。您打算添加更新类型吗?不同的数据源?文件格式?
我一直认为,在设计和编程中,有两件事你可以无休止地做:抽象和间接。知道多少是太少,多少是太多,才是真正的艺术。
关于java - 导入和更新操作的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18406605/