存储/序列化对象列表

时间:2010-08-02 16:52:52

标签: c# asp.net-mvc database-design xml-serialization

我在这种情况下遇到了将对象列表存储为类中的属性以及如何将它们正确地序列化为XML的正确方法。

例如,我们有一个TabGroup类,它将包含零个或多个Tabs。

有一个Tabs属性列表或Tabs引用列表是否更好?如果Tabs由唯一的slugs识别。

List<Tab>

List<string>

最后归结为

  1. 仅序列化整个TabGroup图表(将包含其所有选项卡及其内容)
  2. 独立地序列化Tabgroups和Tabs,并将它们分开并通过序列化Tabgroup图中的slug列表进行引用。
  3. 最值得注意的1:

    • Tabgroup完整地保存在一个序列化文件中,保持数据存储结构简单。

    最值得注意的1:

    • 每次对包含的选项卡之一进行更新时,Tabgroup也必须更新(重新序列化)。

    最着名的职业选手2:

    • 更新标签不需要Tabgroup的重新序列化(至少在没有添加或删除任何内容时),因为引用保持不变;所以只有更新的Tab必须再次序列化。

    2中最值得注意的骗局(这是我写这篇文章的主要原因)

    • 可以在文件存储中删除单个选项卡文件,但引用列表保持不变,因此在查看/呈现选项卡组时会出现错误/异常;必须实现复杂的逻辑来呈现诸如“Tab以不受支持的方式从数据存储中删除,还从Tabgroup中删除它?”

    你有什么建议来解决这个问题?我将接受将涵盖广泛影响的答案。请注意,我们在这里只讨论XML持久性,显然在SQL中我们几乎没有实验空间,因为Tabgroups和Tabs无论如何通常都在单独的表中(它们之间有一对多的关系)。

1 个答案:

答案 0 :(得分:1)

除非你有一些非常令人信服的理由,为什么复杂的数据存储是一个好主意,你通常应该保持简单。其次,在阅读了整篇文章两次后,我真的不明白你的问题是什么。

我不太确定你的问题是什么,但是如果你问你的设计是否应该返回List<Tab>List<string>,其中每个字符串代表一个标签的链接,那么我会争辩为List<Tab>。如果加载是个问题,您可以延迟加载整个结构,除了ID或您用于链接的任何内容。通常,它只是让您更容易直接从对象中获取所需内容,而不必获取链接列表并单独加载所有链接。

如果没有针对实际问题的更多信息,我怀疑除了根据假定情况提供一些长篇优缺点之外,任何人都能帮助你更多。