C# 不同数据结构的模式

C# 不同数据结构的模式,c#,design-patterns,file-format,C#,Design Patterns,File Format,我正在从事一个项目,该项目要求将固定长度的文件反序列化为对象结构 该文件具有以下基本结构: --文件头数据 -----组 ----------细节 通常这将是一项简单的任务,但是这种特殊的文件格式有大约10种不同的详细记录子格式。例如,如果详细信息行以代码“7”开头,则其格式为ABC,字段与格式XYZ(以“8”开头的行)大不相同 所以我的问题是,我可以使用什么样的设计模式以优雅的方式实现这一点 我的第一个想法是使用DetailType枚举属性创建一个泛型detail类,并且还具有一个名为Spec

我正在从事一个项目,该项目要求将固定长度的文件反序列化为对象结构

该文件具有以下基本结构:

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

通常这将是一项简单的任务,但是这种特殊的文件格式有大约10种不同的详细记录子格式。例如,如果详细信息行以代码“7”开头,则其格式为ABC,字段与格式XYZ(以“8”开头的行)大不相同

所以我的问题是,我可以使用什么样的设计模式以优雅的方式实现这一点

我的第一个想法是使用DetailType枚举属性创建一个泛型detail类,并且还具有一个名为SpecData的IDetailSpec类型的属性。IDetailSpec实际上只是一个标记接口。然后,每当我使用Detail对象时,我都会检查DetailType属性,并根据上下文对SpecData属性进行强制转换

但这感觉“不对”:


欢迎任何意见

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

存储数据的方式将取决于实际需要对其执行的操作。如果不知道需要对数据执行什么操作,就无法真正做出关于如何存储数据的明智决定。您可能需要factory模式,其中factory的参数是格式类型,创建的类型知道如何反序列化特定类型的细节record@Servy存储的所有数据将在应用程序中使用,具体取决于当前操作的上下文。例如,有一个返回细节记录的概念,因此我们将有一个MarkForReturn()方法,该方法将更改细节记录的字段。更改的字段以及将其更改为哪些值都取决于详细信息记录的格式。换句话说,这些操作是常见的,但它们的实现方式因格式而异。@antlersoft这是有道理的,但我更想知道细节类在结构上是什么样的。它将由子对象组成,每种格式一个子对象。或者它只是一个IDetailSpec数据字段,您必须根据格式类型强制转换该字段。@Digitalfront为什么要谈论强制转换?你不应该投任何东西。我非常喜欢这个主意。非常感谢。