java - 导入和更新操作的设计模式

标签 java oop design-patterns

我有一个应用程序所需的小组件。该组件加载 csv 文件,然后根据找到的数据更新客户记录。每个客户更新都会有一个 csv 文件。

  1. 检查 csv 文件的文件位置
  2. 对于找到的每个 csv 文件,加载该 csv 文件,对其进行解析并使用任何更新的数据更新客户数据

就是这样。

但是,我在几种方法之间犹豫不决。

  1. 有一个 Updater() 类可以完成所有工作。
  2. 有一个 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 对象并向数据应用更新请求。

不同的 UpdateTypeDoerUpdater 注册,并通过委托(delegate)机制进行选择(即,如果返回 null,下一个 UpdateTypeDoer 将有机会)。

优点:非常灵活,并且易于演进和修改(添加新的数据源、更新类型等)。 缺点:在设计和实现时间方面的大量投资可能永远不会得到返回。您打算添加更新类型吗?不同的数据源?文件格式?

我一直认为,在设计和编程中,有两件事你可以无休止地做:抽象和间接。知道多少是太少,多少是太多,才是真正的艺术。

关于java - 导入和更新操作的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18406605/

相关文章:

c++ - 这是什么设计模式?如何使用它?

java - 将 thymeleaf 登录表单转换为 REST 解决方案

java - 如何检测URL是否有文件?

java - 无法从 StringProperty 转换为 ObservableValue<SimpleStringProperty> java/javafx

php - 这是用于数据库实现的良好 PHP OOP 结构吗?

PHP 为 SDK 使用工厂模式

java - 执行 Broadleaf startadmin.bat 脚本时出错

c++ - 使用另一个类中的成员初始值设定项声明一个类的实例

c# - 在这种情况下我应该使用接口(interface)还是抽象类?

javascript - 您使用哪些 Javascript 编程模式?