我有一个应用程序所需的小组件。加载csv文件然后根据找到的数据更新客户记录的组件。每个客户更新都会有一个csv文件。
多数民众赞成。
然而,我在几种方法之间撕裂了。
这些是正确的解决方案还是有其他更好的解决方案?
答案 0 :(得分:0)
拆分功能。在不了解代码的情况下很难说,但我要说至少将CSV的加载/解析与应用到内部记录分开。我可能会保留在目录中搜索CSV的代码与它们分开。
答案 1 :(得分:0)
除非你需要添加更多功能,否则我会尽可能简单地保持它(1类)。其他课程是否需要更新?如果没有,请不要费心设计,创建(和测试)更复杂的系统。
但是,如果你需要多个类,或许Observer 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个独立类的唯一原因是具有非常复杂的读取文件和更新客户记录的逻辑。但我看不出他们如何如此努力/长期实施。