Дозвуковой опыт ORM - PullRequest
       28

Дозвуковой опыт ORM

7 голосов
/ 08 июня 2011

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

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

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

Ответы [ 3 ]

13 голосов
/ 08 июня 2011

Хм ... ну ... как бы это сказать ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0 голосов
/ 09 июня 2011

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

0 голосов
/ 09 июня 2011

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

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

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

...