使用 C# 在生成器设计模式中集成序列化和反序列化

本文关键字:集成 序列化 反序列化 设计模式 使用 | 更新日期: 2023-09-27 17:57:15

我正在实现构建器模式以生成一组对象。然后,必须将这些对象序列化为 XML 并从 XML 反序列化。

我知道如何执行序列化和反序列化,但我不确定如何将其集成到设计模式中。

例如,假设我的代码使用构建器来创建产品 foo 和 bar。我的第一个想法是在每个产品上放置一个序列化函数,因为每个产品都知道要序列化什么。

我的下一个想法是将反序列化放在 Director 或 ConcreteBuilder 中。

我不喜欢的是序列化和反序列化函数将位于不同的地方 - 一个在文件中用于声明 foo 和 bar 对象,另一个在文件中用于其他内容。我担心它们最终可能会在我处理产品类别时变得不同步。

我的最后一个想法是让 Director 或 ConcreteBuilder 执行序列化和反序列化。我不喜欢的是产品,然后必须知道使用了哪个构建器或知道导演是谁。

澄清一下 - 有两种情况可以创建产品:

  1. 用户单击用户界面中的按钮
  2. 用户加载 XML 项目

使用 C# 在生成器设计模式中集成序列化和反序列化

您不能简单地拥有一个静态序列化/反序列化类并创建一个可以接受任何类型的对象的泛型方法吗? 该模式不就是为了构建对象吗? 然后,您可以根据需要进行序列化吗?

像这样:

public static string Serialize<T>(T data)
    {
       XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
       StringWriter sw = new StringWriter();
       xmlSerializer.Serialize(sw, data);
       return sw.ToString();
    }

我当前的解决方案是让产品执行序列化,ConcreteBuilder执行反序列化,然后将产品及其ConcreteBuilder声明放入同一源文件中。

尽管任务分布在两个类中,但它至少保存在一个文件中。

任何更好的解决方案都值得赞赏。