用于聚合异构表格数据的设计模式
我正在研究一些集成了几十个csv文件信息的C ++代码。 它们都包含一些我想要提取的时间戳记录数据,但是每个文件中的表示方式有所不同。 表示之间的差异超出了不同的列顺序和列名 - 例如,一个文件中的多列一行可能是不同文件中的多行。
所以我需要对每个文件进行一些自定义处理,以便将所有文件中包含必要信息的统一数据结构放在一起。 我的问题是,是否有首选的代码模式来保持复杂性的可管理性和代码的优雅性? 或者,如果有一个很好的案例研究,我应该检查一下过去是如何处理这种复杂性的。
(我认识到类似Perl这样的脚本语言可能会更容易一些,但现在使用的是C ++语言。另外,我的问题更多地是关于是否有代码模式来解决这个问题 - 所以答案不一定要太特定语言。)
您在问题中使用的几个短语可以帮助我: custom handling for each file
, representation is somewhat different
, complexity manageable
。 基于你将不得不使用基于csv文件格式的各种不同的解析算法,并且你(从我所知道的)想松散地耦合你的解析机制,我会推荐策略模式。
策略模式将解析机制与CSV文件中包含的数据的用户分离。 数据用户对CSV文件的格式没有兴趣,他们只对该文件中的信息感兴趣,这使得策略模式成为一个很好的选择。 如果解析机制之间有相似之处,则可以同时使用模板和策略模式以减少重复并利用继承。
通过使用策略模式,您可以将策略创建提取到工厂方法或抽象工厂中,因为您认为进一步允许客户端与解析方法分离。
我不太清楚你想用不同的文件做什么。 如果这个想法是像数据库表一样使用它们,并且你有一些键分散在多个文件中的附加信息,那么你可能想看看像MapReduce这样的东西,你首先从每个文件构建信息的一部分,然后聚合信息在第二步共享相同的密钥。
至于数据结构,它取决于你的文件的布局。 我可能会为每种文件类型设置一个专用阅读器,这些阅读器会将信息存储在代表文件中信息的专用数据结构中。 您可以为每个信息附加一个密钥,并使用reduce操作将所有信息片段使用同一个密钥进行合并,并将它们聚合到代理结构中。
另一方面,如果想法是从不同的序列化方法构建相同的对象(即,不同的文件是独立的,但是用不同的布局表示相同类型的数据),则不用预先知道已经采用了哪种序列化方法,而是我害怕唯一的解决办法就是蛮横的反序列化。 您可以拥有一组阅读器,每种输入类型都有一个阅读器,并尝试解析文件,如果文件失败,下一个文件开始等等,直到您发现新的文件格式或找到合适的阅读器。 我不认为有任何模式可以解决这个问题。
链接地址: http://www.djcxy.com/p/12387.html上一篇: Design patterns for aggregating heterogeneous tabular data