2014-10-06 83 views
0

我正在处理一个需要将一个固定长度的文件反序列化为一个对象结构的项目。不同数据结构的模式

该文件具有这样的基本结构:

- 文件头部数据
-----组
----------细节

通常这将是一个简单的任务,但是这个特定的文件格式具有大约10个不同的细节记录子格式。例如,如果详细信息行以代码“7”开始,那么它的格式为ABC,与格式XYZ(从'8'开始的行)有很大不同的字段。

所以我的问题是,我可能用什么样的设计模式来实现这个优雅的方式?

我的第一个想法是使用DetailType枚举属性创建通用的详细类,并且还有一个名为SpecData的IDetailSpec类型的属性。 IDetailSpec实际上只是一个标记界面。然后,无论何时使用Detail对象,我都会检查DetailType属性,并根据上下文对SpecData属性执行强制转换。

但是,这种感觉是错误的:) :)

任何想法都欢迎!

+0

您如何存储数据将取决于您实际需要处理的数据。如果不知道你需要怎样处理数据,那么就不能真正做出应该如何存储数据的明智决定。 – Servy 2014-10-06 16:27:40

+0

您可能需要工厂模式,其中工厂参数是格式类型,并且创建的类型知道如何反序列化特定类型的详细记录 – antlersoft 2014-10-06 16:29:47

+0

@Servy所有存储的数据都将在应用程序中使用,具体取决于上下文手头的操作。例如,有一个返回细节记录的概念,所以我们将有一个MarkForReturn()方法,然后更改细节记录的字段。被更改的字段以及将其更改为全部的值取决于详细记录的格式。换句话说,这些操作很常见,但它们如何实现因格式而异。 – 2014-10-06 16:48:15

回答

1

我会建议做一个基类来处理所有不同的细节类型之间保持相同的字段。 (现在,更改的数据将“反序列化”为单个字段)。然后,您需要为每种类型的详细信息记录拥有不同的子类,并使用工厂类型模式根据详细信息创建适当子类的实例行的代码。每个子类将从基类对象的“详细数据”字段反序列化。

+0

我很喜欢这个想法。谢谢! – 2014-10-06 17:24:30