1

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

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

而已。

然而,我在几种方法之间徘徊。

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

其中哪一个是正确的解决方案,或者还有其他更好的解决方案吗?

4

4 回答 4

0

拆分功能。如果不了解更多关于代码的信息,很难说,但我会说至少将 CSV 的加载/解析与将其应用于您的内部记录分开。我可能会将在目录中搜索 CSV 的代码与它们分开。

于 2013-08-23T15:34:10.280 回答
0

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

但是,如果您需要多个类,也许观察者模式就是您正在寻找的。这样,其他对象注册他们想要获取更新事件,并且知道如何解析这些记录的类会触发更新事件。Listening 类可以接收这些更新事件并进行实际更新。

于 2013-08-23T15:36:19.693 回答
0

如果您正在考虑一个真正的通用设计,请考虑以下几点:

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

  • 接口:从某处UpdateSetBuilder产生一个。UpdateSet

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

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

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

不同UpdateTypeDoer的s注册到the上Updater并通过委托机制进行选择(即依次给予每一个识别记录的机会,如果返回null,则UpdateTypeDoer给予下一个机会)。

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

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

于 2013-08-23T15:38:01.530 回答
0

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

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

我能想到将这Updater两个单独的类拆分的唯一原因是读取文件和更新客户记录的逻辑非常复杂。但我看不出它们如何难以/长时间实施。

于 2013-08-27T09:50:40.863 回答