Дозвуковой опыт ОРМ


Я ищу новый ORM для важного проекта, я привык nHibernate с ActiveRecord, и у меня уже есть очень плохой опыт с EF4, производительность и сбой GUI.

Так что поиск в Интернете я нашел дозвуковой, мне понравилось то, что я прочитал в документации.

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

3 7

3 ответа:

Хм ... хорошо... как я должен положить его....

В настоящее время (как и сейчас) я прилагаю усилия, чтобы заменить дозвуковое на Петапоко. Полагаю, это о чем-то говорит.

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

Во-первых, самая большая причина, по которой дозвуковой не подходил мне, была Линк.

Есть соблазн в том, что компилятор проверяет все использование свойств, чтобы быть уверенным. Однако на практике он просто не подходил для того, чтобы задавать вопросы.

Если вы придерживаетесь очень близко к использованию class-per-table & ActiveRecord, я полагаю, что это нормально. Но всякий раз, когда нам приходилось делать какой-либо запрос помимо этого (что-либо, связанное с несколькими таблицами или что-либо за пределами простейших предложений where), это был кошмар. Ассоциации не могут использоваться непосредственно в дозвуковом запросе LINQ, как они может в эф или нхибернате, который был, вероятно, самой большой болевой точкой.

Например, такой запрос будет не работать в дозвуковом режиме, но он будет работать в EF:

db.Accounts.Where(a => a.OwningUser.Email != null);

Где я в конечном итоге либо делал Много поездок в базу данных, чтобы собрать результат, либо использовал класс SubSonic CodingHorror для запроса непосредственно с SQL, и не мог просто материализовать их как POCO (опять же, когда выходил за рамки простого класса на таблицу).

Я также обнаружил, что каждый LINQ провайдер поддерживает различные наборы операций, и иногда одна и та же логическая операция будет иметь немного различный синтаксис и использование между провайдерами. Это сделало написание большинства запросов очень трудоемким и подверженным ошибкам. Поставщик LINQ компании SubSonic не испытывает недостатка в причудливых и малоизвестных продуктах. Он не приближается к Linq-2-SQL, Entity Framework или LINQ, чтобы нивернить его с точки зрения поддерживаемых операций, удобства использования или скорости выполнения (будьте готовы изучить новые способы написания соединений в LINQ только для SubSonic - и будьте готовы к тому, что некоторые общие операции просто не будут возможны с поставщиком LINQ от SubSonic, несмотря на известные ошибки в течение года).

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

LINQ также соблазнил меня возможностью повторного использования кода с такими методами, как спецификации, но воплотить их в плоть было далеко не просто, и конечный результат даже близко не стоил затраченных усилий. Препятствия, с которыми я столкнулся здесь, были в значительной степени связаны с тем, что поставщик LINQ компании SubSonic не имел поддержки ассоциаций.

Средства SubSonic за пределами LINQ, которые я чувствовал, были в лучшем случае посредственными (на мой взгляд).

Во-вторых, важно знать, что по всем параметрам дозвуковая не является активным проектом.

Первоначальный создатель дозвуковой системы, Роб Конери, больше не работает над проект. Последний раз Роб совершал коммит в июле 2010 года.

Последнее обязательство по проекту вообще было 3 месяца назад, несмотря на почти 100 нерешенных вопросов . И насколько я могу судить, не было никакого выпуска, даже незначительного выпуска, с тех пор как Роб перестал работать над дозвуковым (хотя люди, все еще болтающиеся вокруг проекта, были говорят об освобождении уже более полугода).

Группа Google для Дозвуковая раньше была активной, но в наши дни не так много. И еще официальный сайт дозвукового проекта некоторое время был желтым экраном смерти. ( на сайте больше нет желтых экранов).

Новая жаркость в доступ к данным микро-ORM это. Дозвуковой Создатель, на самом деле, вроде как выставил эту тенденцию с массивные, за которым вскоре последовал второй клиент StackExchange экипажа выпуская щеголеватый, а потом PetaPoco вышел. Там есть ... и еще парочка. И хотя мы отказываемся от небольшой проверки компилятора, имея фрагменты SQL в нашей кодовой базе, я нахожу, что micro-ORM подходит моему стилю разработки гораздо лучше, чем SubSonic.

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

С PetaPoco я могу написать знакомый SQL - я быстр и достаточно хорош в этом - и материализовать их в POCO'S, с которым я знаю, что, черт возьми, делать немедленно. Немного разбрызгивания архитектуры, организации и автоматизированного интеграционного тестирования, и я совсем не чувствую себя грязным при внедрении битов SQL.

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

В заключение (извините за стенку текста):

Дело не в том, что дозвуковая связь плоха в абсолютном смысле. Он просто не подходил к тому, как я пытался его использовать, и в значительной степени потому, что LINQ все еще является дырявой абстракцией, и она протекает по-другому, чем я привык.

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

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

Недостатком этого является то, что набор функций довольно ограничен. Больше всего мне не хватало возможности получать полные графики объектов и поддержки дополнительных индексов. SubSonic имеет его использование в качестве инструмента сохранения для небольших приложений, но я для важных или больших приложений я бы предпочел использовать nHibernate или коммерческий ORM, как LLBLGen.

Перед выбором ORM следует определиться с основными требованиями к доступу к данным. Вы хотите использовать шаблон активной записи или шаблон адаптера? Как насчет параллелизма, производительности, наследования и т. д...

Я использовал сверхзвуковой, это хорошо, пока вы используете простые запросы. Когда у меня появились более сложные запросы, я увидел, что в нем отсутствуют функции LINQ. Погуглив немного, я перешел на http://bltoolkit.net, и с тех пор (около 2 лет) я очень доволен им. Плюс является одним из самых быстрых ORM согласно http://ormeter.net/. Взгляните на него, вы не пожалеете.