使用 C# 在生成器设计模式中集成序列化和反序列化
本文关键字:集成 序列化 反序列化 设计模式 使用 | 更新日期: 2023-09-27 17:57:15
我正在实现构建器模式以生成一组对象。然后,必须将这些对象序列化为 XML 并从 XML 反序列化。
我知道如何执行序列化和反序列化,但我不确定如何将其集成到设计模式中。
例如,假设我的代码使用构建器来创建产品 foo 和 bar。我的第一个想法是在每个产品上放置一个序列化函数,因为每个产品都知道要序列化什么。
我的下一个想法是将反序列化放在 Director 或 ConcreteBuilder 中。
我不喜欢的是序列化和反序列化函数将位于不同的地方 - 一个在文件中用于声明 foo 和 bar 对象,另一个在文件中用于其他内容。我担心它们最终可能会在我处理产品类别时变得不同步。
我的最后一个想法是让 Director 或 ConcreteBuilder 执行序列化和反序列化。我不喜欢的是产品,然后必须知道使用了哪个构建器或知道导演是谁。
澄清一下 - 有两种情况可以创建产品:
- 用户单击用户界面中的按钮
- 用户加载 XML 项目
您不能简单地拥有一个静态序列化/反序列化类并创建一个可以接受任何类型的对象的泛型方法吗? 该模式不就是为了构建对象吗? 然后,您可以根据需要进行序列化吗?
像这样:
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声明放入同一源文件中。
尽管任务分布在两个类中,但它至少保存在一个文件中。
任何更好的解决方案都值得赞赏。