用于解析二进制文件数据并存储在数据库中的设计模式

Kei*_*ons 6 fileparse design-patterns

是否有人建议采用二进制数据文件的设计模式,将其中的一部分解析为对象并将结果数据存储到数据库中?

我认为可以使用类似的模式来获取XML或制表符分隔的文件,并将其解析为其代表对象.

常见的数据结构包括:

(Header)(DataElement1)(DataElement1SubData1)(DataElement1SubData2)(DataElement2)(DataElement2SubData1)(DataElement2SubData2)(EOF)

我认为一个好的设计将包括一种基于文件类型或标题中包含的一些定义的元数据来更改解析定义的方法.因此,工厂模式将成为Parser部件整体设计的一部分.

Ori*_*rds 21

  1. 只需编写您的文件解析器,即可使用任何技术
  2. 为它编写大量单元测试,以确保涵盖所有边缘情况

完成此操作后,您将真正了解问题/解决方案.

现在你只有脑子里浮现的理论,其中大部分都会被误导.

第3步:无情地重构.您的目标应该是删除大约一半的代码

您会发现最后的代码将与现有的设计模式相似,或者您将创建一个新的代码.然后你有资格回答这个问题:-)


Hen*_*son 5

我完全同意 Orion Edwards 的观点,这通常是我处理问题的方式;但最近我开始看到一些疯狂的模式(!)。

对于更复杂的任务,我通常使用类似解释器(或策略)的东西,它使用一些构建器(或工厂)来创建数据的每个部分。

对于流数据,整个解析器看起来像一个适配器,从流对象适应到对象流(通常只是一个队列)。

对于您的示例,可能会有一个用于完整数据结构(从 head 到 EOF)的构建器,该构建器在内部使用内部数据元素的构建器(由解释器提供)。一旦遇到 EOF,就会发射一个对象。

然而,对于许多较小的任务来说,在某些工厂函数中的 switch 语句中创建对象可能是最简单的方法。另外,我喜欢保持数据对象不可变,因为你永远不知道何时有人将并发强加给你:)