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

时间:2013-08-23 15:30:49

标签: java oop design-patterns

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

  1. 检查csv文件的文件位置
  2. 对于找到的每个csv文件,加载csv文件,解析它并使用任何更新的数据更新客户数据
  3. 多数民众赞成。

    然而,我在几种方法之间撕裂了。

    1. 拥有一个可以执行所有操作的Updater()类。
    2. 有一个Update()类,它表示已加载的csv数据,它知道如何解析csv等,然后还有一个Updater()类,负责更新客户记录。 Update()类将具有Updater()
    3. 这些是正确的解决方案还是有其他更好的解决方案?

4 个答案:

答案 0 :(得分:0)

拆分功能。在不了解代码的情况下很难说,但我要说至少将CSV的加载/解析与应用到内部记录分开。我可能会保留在目录中搜索CSV的代码与它们分开。

答案 1 :(得分:0)

除非你需要添加更多功能,否则我会尽可能简单地保持它(1类)。其他课程是否需要更新?如果没有,请不要费心设计,创建(和测试)更复杂的系统。

但是,如果你需要多个类,或许Obse​​rver Pattern就是你要找的。这样,其他对象注册他们想要获取更新事件,而知道如何解析这些记录的类会触发Update事件。 Listening类可以接收这些Update事件并进行实际更新。

答案 2 :(得分:0)

如果您正在考虑真正的一般设计,请考虑以下事项:

  • 班级UpdateSet:更新列表。如果需要,可以使用CSV文件。
  • 接口UpdateInstance:从请求的角度来看,不同类型的更新。如果需要,可以使用CSV行。
  • 班级InsertInstance:实施UpdateInstance。插入请求。
  • 班级DeleteInstance:实施UpdateInstance。删除请求。
  • 班级ChangeInstance:实施UpdateInstance。更新请求。

  • 界面UpdateSetBuilder:从某处生成UpdateSet

  • 班级CSVUpdateSetBuilder:通过阅读CSV文件实现UpdateSetBuilder。可能是一个单身对象。
  • 界面UpdateParser:采用CSV行并生成UpdateInstance(或拒绝它)。
  • 班级InsertParser:实施UpdateParser。可能是一个单身对象。检测并解析插入请求。
  • 班级DeleteParser:实施UpdateParser。可能是一个单身对象。检测并解析删除请求。
  • 班级ChangeParser:实施UpdateParser。可能是一个单身对象。检测并解析更新请求。

不同的UpdateParser已在CSVUpdateSetBuilder注册,并通过委托机制进行选择(即,每个都有机会识别记录,如果它返回null,则下一个{ {1}}将有机会)。

  • 班级UpdateParser:收集Updater并对其应用CustomerRecords
  • 接口UpdateSet:从执行的角度来看,不同类型的操作。
  • 班级UpdateTypeDoer:实施InsertDoer。检测UpdateTypeDoer个对象并将其应用于数据。
  • 班级InsertInstance:实施DeleteDoer。检测UpdateTypeDoer个对象并对数据应用删除请求。
  • 班级DeleteInstance:实施ChangeDoer。检测UpdateTypeDoer个对象并对数据应用更新请求。

不同的ChangeInstance已在UpdateTypeDoer注册,并通过委托机制进行选择(即,每个都有机会识别记录,如果它返回null,则下一个{ {1}}将有机会)。

优点:非常灵活,易于进化和修改(添加新数据源,更新类型等)。 缺点:在设计和实施时间方面的巨大投资可能永远不会回报。你有没有要添加更新类型?不同的数据来源?文件格式?

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

答案 3 :(得分:0)

如果是逻辑 that loads a csv file以及then updates customer records based on the data it finds非常简单/短的逻辑然后将它们保存在一个Updater类中,该类首先加载数据然后更新它。

如果CSV数据本身很复杂,最好使用适当的mutator(setters / getters)创建一个额外的类来存储每个对象的数据(csv文件中的条目)。它仍然可以在一个读取文件的类中使用,为每个条目创建一个对象,然后更新客户记录。

我能想到将Updater拆分为2个独立类的唯一原因是具有非常复杂的读取文件和更新客户记录的逻辑。但我看不出他们如何如此努力/长期实施。