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

马蒂·华莱士(Marty Wallace)

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

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

而已。

但是,我在完成此操作的两种方法之间陷入了困境。

  1. 有一个可以完成所有任务的Updater()类。
  2. 有一个Update()类,它表示已加载的csv数据,它知道如何解析csv等。然后还有一个Updater()类,它负责更新客户记录。Update()类将具有Updater()

以下哪项是正确的解决方案,或者还有其他更好的解决方案吗?

马里奥·罗西(Mario Rossi)

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

  • UpdateSet:更新列表。CSV文件(如果需要)。
  • 界面UpdateInstance:从请求的角度来看,不同类型的更新。CSV行(如果需要)。
  • InsertInstance:器物UpdateInstance插入请求。
  • DeleteInstance:器物UpdateInstance删除请求。
  • ChangeInstance:器物UpdateInstance更新请求。

  • 接口UpdateSetBuilderUpdateSet从某处产生一个

  • CSVUpdateSetBuilderUpdateSetBuilder通过读取CSV文件实现。可能是单例对象。
  • 接口UpdateParser:接受CSV行并产生一个UpdateInstance(或拒绝它)。
  • InsertParser:器物UpdateParser可能是单例对象。检测并解析插入请求。
  • DeleteParser:器物UpdateParser可能是单例对象。检测并解析删除请求。
  • ChangeParser:器物UpdateParser可能是单例对象。检测并解析更新请求。

不同的UpdateParsers在上注册,CSVUpdateSetBuilder并通过委托机制进行选择(即,依次为每个s赋予识别记录的机会,如果它返回null,则UpdateParser给予下一个机会)。

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

不同的UpdateTypeDoers在上注册,Updater并通过委托机制进行选择(即,依次为每个变量赋予识别记录的机会,如果返回空值,则UpdateTypeDoer给予下一个机会)。

优点:非常灵活,并且易于演化和修改(添加新数据源,更新类型等)。缺点:在设计和实施时间方面的巨额投资可能永远无法收回。您是否要添加更新类型?不同的数据源?文件格式?

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章