Каковы преимущества использования ORM по сравнению с сериализацией / десериализацией XML? - PullRequest
0 голосов
/ 02 апреля 2010

Я читал о NHibernate и Microsoft Entity Framework для выполнения объектно-реляционного сопоставления с моим уровнем доступа к данным. Я заинтересован в преимуществах наличия установленной среды для выполнения ORM, но мне любопытно узнать о затратах на производительность при ее использовании по сравнению со стандартной сериализацией и десериализацией XML.

Сейчас я разрабатываю хранимые процедуры в Oracle и SQL Server, которые используют типы XML для входных или выходных параметров и возвращают или уничтожают XML в зависимости от необходимости. Я использую пользовательский объект команды базы данных, который использует обобщенные значения для десериализации результатов XML в указанный сериализуемый класс.

Используя комбинацию обобщений, сериализации xml (de) и DAAB от Microsoft, я получил процесс, который довольно просто разрабатывать независимо от источника данных. Более того, поскольку я использую исключительно хранимые процедуры для выполнения операций с базой данных, я в основном защищен от изменений в структуре данных.

Вот упрощенный пример того, что я делал.


static void main() {
     testXmlClass test = new test(1);
     test.Name = "Foo";
     test.Save();
}

// Example Serializable Class ------------------------------------------------
[XmlRootAttribute("test")]
class testXmlClass() {
     [XmlElement(Name="id")]
     public int ID {set; get;}
     [XmlElement(Name="name")]
     public string Name {set; get;}

     //create an instance of the class loaded with data.
     public testXmlClass(int id) {
         GenericDBProvider db = new GenericDBProvider();
         this = db.ExecuteSerializable("myGetByIDProcedure");
     }

     //save the class to the database...
     public Save() {
         GenericDBProvider db = new GenericDBProvider();
         db.AddInParameter("myInputParameter", DbType.XML, this); 
         db.ExecuteSerializableNonQuery("mySaveProcedure");
     }
}

// Database Handler ----------------------------------------------------------
class GenericDBProvider {

     public T ExecuteSerializable<T>(string commandText) where T : class {
          XmlSerializer xml = new XmlSerializer(typeof(T)); 

          // connection and command code is assumed for the purposes of this example.
          // the final results basically just come down to...

          return xml.Deserialize(commandResults) as T;
     }

     public void ExecuteSerializableNonQuery(string commandText) {
          // once again, connection and command code is assumed...
          // basically, just execute the command along with the specified
          // parameters which have been serialized.
     }

     public void AddInParameter(string name, DbType type, object value) {
          StringWriter w = new StringWriter();
          XmlSerializer x = new XmlSerializer(value.GetType());

          //handle serialization for serializable classes.
          if (type == DbType.Xml && (value.GetType() != typeof(System.String))) {
               x.Serialize(w, value);
               w.Close();
               // store serialized object in a DbParameterCollection accessible
               // to my other methods.
          } else {
               //handle all other parameter types
          }
     }
}

Я начинаю новый проект, который будет сильно зависеть от операций с базой данных. Мне очень любопытно узнать, будут ли мои текущие практики устойчивыми в ситуации большого трафика и стоит ли мне подумать о переходе на NHibernate или Microsoft Entity Framework, чтобы выполнить то, что по сути сводится к тому же, что и сейчас делает.

Я ценю любой совет, который вы можете дать.

1 Ответ

1 голос
/ 03 апреля 2010

Перво-наперво, если вы не готовы отказаться от использования хранимых процедур, NHibernate не принесет особой пользы, и Entity Framework, вероятно, разочарует вас.

По-моему, похоже, что вы пытаетесь изобрести колесо заново. Переключившись на использование общепринятого инструмента ORM, вы можете быть уверены, что ваш проект будет устойчивым в условиях большого трафика (вы можете использовать такие инструменты, как NH Prof или EF Prof , чтобы помочь здесь). Кроме того, использование ORM обеспечит гораздо больше преимуществ, включая повышение удобства обслуживания и возможную производительность после небольшого периода наращивания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...