Лучшие практики для загрузки объектов из сериализованного XML в C # - PullRequest
1 голос
/ 16 октября 2008

Привет,

У меня есть конкретный объект, который может быть построен из файла, например:

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; 
     }
}

Я хочу, по сути, сказать «хорошо, и теперь этот объект, который мы только что десериализовали, это объект, которым мы на самом деле являемся». Есть несколько способов сделать это, и мне интересно, что считается наилучшей практикой. Мои идеи:

  • Создание функции copy-to-me, которая копирует объект по полю. Это текущая реализация, и я уверен, что это ужасная идея, поскольку всякий раз, когда новый объект добавляется к объекту, я также должен помнить, чтобы добавить его в функцию «копировать в меня», и нет никакого способа, который можно обслуживать. .
  • Создание статического метода для класса ConfigObj, который де-факто является конструктором для загрузки объекта. Это звучит намного лучше, но не очень хорошо для практики.

Хотя я не совсем доволен одним из двух. Какова здесь признанная лучшая практика?

Ответы [ 3 ]

3 голосов
/ 16 октября 2008

Ваш второй вариант - это то, что называется фабричным методом и является обычной техникой проектирования. Если вы используете эту технику, вы можете обнаружить, что вам нужно знать тип класса, который вы будете загружать, прежде чем вы действительно загрузите класс. Если вы столкнетесь с этой ситуацией, вы можете использовать фабрику более высокого уровня, которая просматривает поток и вызывает метод фабрики для соответствующего типа класса.

2 голосов
/ 16 октября 2008

Нет ничего плохого в наличии статического метода вместо конструктора. На самом деле, он имеет ряд преимуществ .

1 голос
/ 16 октября 2008

Я всегда иду со статическим методом. Обычно это своего рода иерархия, которая загружается, и поэтому только корневой объект нуждается в методе. И это не совсем необычный подход в .NET Framework (например, Graphics.FromImage), поэтому он должен подойти пользователям вашего класса.

...