Подтвердить что ты не робот

Любые мысли о пакете ORM DevExpress XPO?

XPO является объектным реляционным сопоставителем по выбору в моей компании. Любые мысли о плюсах и минусах?


Я просто искал общие чувства и анекдоты о продукте. Мы не переключаемся на XPO. Мы просто избавляемся от жестко закодированных строк sql, живущих в приложении, и полностью перемещаемся в ORM для доступа к данным.

4b9b3361

Ответ 1

Другие, возможно, найдут технические ответы (например, синтаксис запроса, использование кэширования, простота или иное сопоставление с существующей структурой базы данных), но если у вас установлен установленный уровень ORM, ответ, вероятно, будет

"Зачем меняться"?

Я успешно использовал XPO в течение многих лет в установленном коммерческом продукте с несколькими сотнями пользователей. Я нахожу, что это быстро, гибко и делает работу. На данный момент я не вижу необходимости меняться, так как наши объемы данных не особенно велики, а недостатки (в основном, кеширование) - это то, с чем мы можем работать.

Если бы я начинал заново, я бы определенно посмотрел на NHibernate и ADO.NET Entity Framework. На практике, однако, все хорошо; Я бы скорее всего посмотрел на коммерческую ситуацию для проекта, опередив технические вопросы.

Например, NHibernate является открытым исходным кодом - существует ли жизнеспособное сообщество для поддержки этого инструмента и предоставления (при необходимости) коммерческой поддержки?

XPO поставляется от поставщика инструментов, возможно, они останутся в бизнесе на протяжении всего срока службы продукта?

ADO.NET Entity Framework принадлежит Microsoft, которые чаще всего меняют технологии баз данных, а затем Ларри наполняет своего истребителя реактивным топливом - также это исчезнет?

Ответ 2

Я нашел XPO очень расстраивающим для работы. Основная идея ORM состоит в том, чтобы абстрагироваться от базовой структуры данных. Но очень быстро вы заметите, что они имеют длину строки по умолчанию, жестко закодированную до 60 символов, поэтому вы добавляете эти уродливые строки. Неограниченные вещи вокруг каждой строки. Так много для абстракции...

При моделировании более сложного объекта вам нужно использовать синтаксис, который действительно не имеет места в вашей объектной модели, например XPCollection. Я хотел сохранить класс, в котором есть словарь строк в классе, но, к сожалению, XPO не смог автоматически сохранить его в базе данных.

Итак, пока он работает нормально для простых типов, он очень быстро ломается, когда вы хотите хранить более сложные вещи. Это в сочетании с их посредственной поддержкой действительно оставляет желать лучшего.

Ответ 3

Я работаю с ним в течение 6-7 месяцев, и продавцом для меня был тот факт, что все их компоненты пользовательского интерфейса работают относительно плавно с XPO - и их компоненты пользовательского интерфейса являются на высшем уровне.

Некоторые могут заметить, что их форумы плохо контролируются и имеют мало полезного трафика - это правда. Секрет в том, чтобы заполнить билеты, хотя. Они быстро и точно реагируют на все свои билеты на поддержку.

Ответ 4

XPO в целом легко работать. Тем не менее, это может быть немного больно, когда вы планируете работать с устаревшей базой данных или пытаться ввести ее в приложение с коричневым полем. Наиболее болезненными препятствиями, которые я ударил, были:

  • всем объектам необходимо наследовать классы, связанные с XPO, и/или использовать связанные с XPO атрибуты. Таким образом, никакие объекты POCO
  • нет поддержки для readonly persistent полей OOTB. Это возможно, но вам нужно немного взломать, чтобы остановить XPO из поля обновления в DB
  • нет поддержки ассоциаций предварительной фильтрации, которые могут вызвать чрезмерную загрузку сети.
  • Плохая поддержка внешних составных клавиш. Справедливости ради нет, ORM отлично справляется с составными клавишами. Они считаются "анти-ОРМ".
  • несколько небольших неприятностей

Как заметил Деннис в комментариях, XPO значительно улучшилось, так как я написал этот ответ изначально. В частности, ниже все больше не проблема:

  • нет сериализации, поэтому объекты XPO трудно использовать в сценарии разрозненных win-форм с данными, поступающими через веб-службы. - XPO теперь поддерживает различные сценарии сериализации и может быть легко использован с WCF.
  • вы не можете сопоставлять отношения много-ко-многим с вашей собственной промежуточной таблицей. Xpo хочет указать конкретное имя для таких промежуточных таблиц. - Это уже не случай.
  • нет поддержки перечислений в провайдере postgreSql. Вам просто нужно написать действительно простой конвертер значений, и вы хороши.

Кроме того, ниже проблемы больше не будут проблемы со следующей версией XPO, которая выйдет в этом году:

  • поддержка ключей типа long
  • поддержка db-схемы в postrgeSql-провайдере

В целом XPO значительно улучшилось. Большинство болезненных препятствий были устранены. Вы можете столкнуться с проблемами при работе с устаревшей БД. Но в целом XPO стал весьма удобен в использовании.

Ответ 5

XPO ver 10.2 теперь поддерживает как StoredProcedures, так и SqlQueries. См. Информацию здесь...

Ответ 6

Плюсы и минусы по сравнению с чем? Есть много альтернатив, самый популярный из них - nHibernate, с новым ребенком "ADO.NET Entity Framework" на блоке.

В любом случае, сотни ответов зависят от вашей ситуации и требований.

Ответ 7

Мне нравится, что вы можете просто создавать классы, а xpo создает для вас таблицы и отношения, поэтому вы можете начать с пустой базы данных.

Одна из проблем, которые мне не нравятся, - это когда я хочу удалить целую кучу вещей, она будет проходить через мою коллекцию и делать удаление на каждом из них. Это занимает много времени, поэтому для такого экземпляра мне пришлось написать какой-то пользовательский sql (удалить из таблицы, где blah). Я не эксперт по XPO, но это то, что я нашел.

Ответ 8

Во-вторых, факт удаления сложных объектов с некоторыми коллекциями действительно очень длительный. Пока документация или форумы не смогли мне помочь.

Кроме того, он действительно прост в использовании и ускоряет работу.

Также довольно сложно разобраться в использовании памяти, у меня были сложные объекты в моем дизайне, и работа с ними была памятью больше, чем я предполагал.

Ответ 9

Это все, что вам нужно сделать, чтобы начать писать ваши объекты домена (попробуйте сделать то же самое в других системах):

using System;
using DevExpress.Xpo;
using DevExpress.Data.Filtering;
using NUnit.Framework;

namespace XpoTdd {
    public class Person:XPObject {
        public Person(Session session) : base(session) { }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        [Persistent]
        public string FullName { get { return FirstName + " " + LastName; } }
    }
    [TestFixture]
    public class PersonTests {
        [Test]
        public void TestPersistence() {
            const string connStr = "Integrated Security=SSPI;Pooling=false;Data Source=(local);Initial Catalog=XpoTddTest";
            UnitOfWork session1 = new UnitOfWork();
            session1.ConnectionString = connStr;
            Person me = new Person(session1);
            me.FirstName = "Roman";
            me.LastName = "Eremin";
            session1.CommitChanges();
            UnitOfWork session2 = new UnitOfWork();
            session2.ConnectionString = connStr;
            me = session2.FindObject<Person>(CriteriaOperator.Parse("FullName = 'Roman Eremin'"));
            Assert.AreEqual("Roman Eremin", me.FullName);
        }
    }
}