【问题标题】:Best Practice for Loading Object from Serialized XML in C#在 C# 中从序列化 XML 加载对象的最佳实践
【发布时间】:2008-10-16 09:13:01
【问题描述】:

你好,

我有一个可以从文件构造的特定对象,例如:

public class ConfigObj
{
     public ConfigObj(string loadPath)
     {
          //load object using .Net's supplied Serialization library
          //resulting in a ConfigObj object
          ConfigObj deserializedObj = VoodooLoadFunction(loadpath); 

          //the line below won't compile
          this = thisIsMyObj; 
     }
}

本质上,我想说“好的,现在我们刚刚反序列化了这个对象,这就是我们实际上的对象。”有几种方法可以做到这一点,我想知道哪种方法被认为是最佳实践。我的想法是:

  • 构建一个复制到我的功能,逐个字段复制对象。这是当前的实现,我很确定这是一个可怕的想法,因为每当将新成员添加到对象时,我还需要记住将其添加到“复制到我”功能中,并且没有办法可以维护.
  • 为 ConfigObj 类构建一个静态方法,该方法充当加载对象的事实上的构造函数。这听起来好多了,但不是最佳实践。

不过,我对两者都不完全满意。这里公认的最佳做法是什么?

【问题讨论】:

    标签: c# .net serialization xml-serialization


    【解决方案1】:

    您的第二个选项是所谓的factory method,它是一种常见的设计技术。如果您确实使用了这种技术,您可能会发现在实际加载类之前需要知道要加载的类的类型。如果遇到这种情况,您可以使用更高级别的工厂类型,它查看流并为适当类型的类调用工厂方法。

    【讨论】:

    • 谢谢。 (至少在我仅加载此特定类型的有限情况下)是否可以在与正在加载的方法相同的类中创建工厂方法?不管出于什么原因,我的印象是工厂通常都有自己的类。
    • 当然,您可以在类本身中创建静态工厂方法。如果您有一整棵潜在对象树要处理,则只需要更高级别的工厂抽象。对于您的情况,只需创建一个返回新分配的类实例的静态方法。
    【解决方案2】:

    使用静态方法而不是构造函数并没有错。事实上,它有一个number of advantages

    【讨论】:

      【解决方案3】:

      我总是使用静态方法。通常它是一种被加载的层次结构,因此只有根对象需要该方法。在 .NET 框架(例如 Graphics.FromImage)中,这并不是一种不寻常的方法,因此对于您的类的用户来说应该没问题。

      【讨论】:

        猜你喜欢
        • 2013-07-27
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 1970-01-01
        • 2014-06-16
        相关资源
        最近更新 更多