【发布时间】:2014-10-06 16:24:44
【问题描述】:
我正在处理一个需要将固定长度文件反序列化为对象结构的项目。
该文件具有以下基本结构:
-- 文件头数据
----- 团体
----------详情
通常这将是一件容易的事,但是这种特殊的文件格式有大约 10 种不同的子格式用于详细记录。例如,如果详细信息行以代码“7”开头,则其格式为 ABC,其字段与 XYZ 格式(以“8”开头的行)大不相同。
所以我的问题是,我可以使用什么设计模式以优雅的方式实现它?
我的第一个想法是创建一个具有 DetailType 枚举属性的通用细节类,并且还有一个名为 SpecData 的 IDetailSpec 类型的属性。 IDetailSpec 实际上只是一个标记接口。然后,每当我使用 Detail 对象时,我都会检查 DetailType 属性并根据上下文对 SpecData 属性进行强制转换。
然而,这感觉“错误”:)
欢迎提出任何想法!
【问题讨论】:
-
如何存储数据将取决于您实际需要使用它做什么。在不知道您需要如何处理数据的情况下,无法真正做出关于如何存储数据的明智决定。
-
你可能想要工厂模式,工厂的参数是格式类型,并且创建的类型知道如何反序列化特定类型的详细记录
-
@Servy 存储的所有数据都将在应用程序中使用,具体取决于手头操作的上下文。例如,有一个返回详细记录的概念,因此我们将有一个 MarkForReturn() 方法,然后将更改详细记录的字段。被更改的字段以及将它们更改为什么值都取决于详细记录的格式。换句话说,这些操作很常见,但它们的实现方式因格式而异。
-
@antlersoft 这很有道理,但我更想知道 Detail 类在结构上会是什么样子。它是否由子对象组成,每种格式一个。或者它是否只有一个 IDetailSpec 数据字段,您必须根据格式类型进行转换。
-
@Digitalfront 你为什么说选角?你不应该施放任何东西。
标签: c# design-patterns file-format