Дозвуковой против NHibernate - PullRequest
       61

Дозвуковой против NHibernate

72 голосов
/ 04 августа 2008

Что такое консенсус о том, когда использовать один из этих инструментов по сравнению с другим? Я считаю, что Subsonic очень полезен с точки зрения быстрого выполнения задач, но в больших проектах он не масштабируется и связывает вашу модель домена с моделью вашей базы данных. Именно здесь Nhibernate предлагает легкие POCO, которые не связаны с вашей моделью базы данных, но время установки намного больше.

Ответы [ 15 ]

83 голосов
/ 13 сентября 2008

Мне часто задают этот вопрос, и на самом деле все сводится к тому, сколько вы хотите возиться. Я не могу сказать вам, насколько разрушительными были комментарии Криса Сайваса RE SubSonic, и с тех пор я отвечаю на них: (.

Дело в том, что SubSonic очень хорошо масштабируется. С точки зрения роста проекта - ЛЮБОЙ инструмент, который вы используете, потребует вашего внимания. Даже NHibernate.

Я написал пост о том, как использовать шаблон Repository с DI (как вы бы это делали с NHIb или любым другим инструментом) в SubSonic 2.1:

http://blog.wekeroad.com/blog/subsonic-writing-decoupled-testable-code-with-subsonic-2-1/

Я также написал пост о производительности SubSOnic:

http://blog.wekeroad.com/blog/subsonic-scaling/

Надеюсь, это поможет.

45 голосов
/ 07 августа 2008

Я бы порекомендовал SubSonic, если ваш проект работает с представлением ActiveRecord, что база данных является вашей моделью. Вы получите один класс за стол, и все просто волшебным образом работает. Вы можете, конечно, настроить и переопределить вещи, но если вы (или ваш проект) принципиально не согласны с подходом «класс на таблицу», я бы посмотрел на NHibernate, поскольку он начинается с более сложного (но более гибкого) подхода отображения вашего модель домена в вашей базе данных.

Если вы используете относительно простую базу данных, которая находится под вашим контролем (например, вы можете изменять столбцы, не отправляя восемь форм на контрольную доску управления подразделением базы данных), я рекомендую начать с SubSonic и перейти на NHibernate, если SubSonic не соответствует вашим потребностям.

31 голосов
/ 05 марта 2009

Для чего это стоит ... У меня была возможность использовать обе технологии совсем немного, так как я задал этот вопрос. И я должен остаться, что, если эти технологии, которые вы выбираете, имеет мало значения. Конечно, NHibernate позволяет вашим бизнес-объектам быть немного менее привязанными к структуре вашей базы данных, но я все же обнаружил, что во многих случаях вам все еще приходится подчиняться воле базы данных.

По моему мнению, единственный верный способ полностью отделить вашу модель домена от модели базы данных - написать свою собственную DTOS (по сути, POCO для передачи данных), а затем отобразить их обратно в ORM. выбора на вашем уровне данных. Но в большинстве случаев такой подход доставит мне больше хлопот, чем стоит.

13 голосов
/ 05 августа 2008

Немного не по теме, но в том же духе. Вы смотрели на Castle ActiveRecord , он написан поверх NHibernate и избавляет от необходимости тратить время на создание сопоставлений XML из кода в базу данных. Как и NHibernate, вы можете структурировать свои доменные объекты по своему усмотрению, а затем сгенерировать схему базы данных из этой структуры.

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

9 голосов
/ 04 марта 2009

Вы можете рассмотреть возможность просмотра Fluent NHibernate; это делает управление NHibernate легким. Не уверен, насколько сложно будет выполнить переход существующей схемы, но если вы создаете новое приложение, было бы неплохо определить модель домена и сгенерировать базу данных практически на любом сервере БД, о котором вы только могли подумать. Прочитав другие комментарии здесь, я думаю, что Fluent NHibernate переводит NHibernate на один уровень с SubSonic для простоты настройки.

7 голосов
/ 07 октября 2008

I недавно написал сообщение в блоге о .NET ORM, в которых есть Subsonic, и ActiveRecord. Исходя из моего опыта, это зависит от того, что делает проект. Subsonic работает намного лучше, если вы работаете с SQL, но NHibernate имеет больше возможностей. ActiveRecord хорош для небольших проектов, я не уверен, что он быстрее для больших проектов, чем придерживаться NHibernate.

7 голосов
/ 04 сентября 2008

Я не могу дать хорошего сравнения, поскольку я еще не использовал NHibernate в проекте, но я использовал SubSonic и был очень доволен этим. До сих пор я не сталкивался с какими-либо серьезными препятствиями при его использовании.

Проверьте этот пост от Роба Конери, одного из создателей SubSonic. Он рассказывает о том, как отделить ваш код SubSonic от остальной части приложения. Он даже упоминает тот факт, что эта архитектура позволит вам впоследствии заменить SubSonic на некоторый другой уровень доступа к данным, например, NHibernate или LINQ to SQL.

Я знаю, что на самом деле не ответил на ваш вопрос, но я надеюсь, что это все еще помогает.

5 голосов
/ 26 января 2009

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

  • NHibernate - мой выбор для более крупных проектов, потому что он использует легкие POCO. Если бы я когда-нибудь выключил свой ORM "Я верю", это было бы намного проще для рефакторинга.
  • SubSonic - мой выбор, когда у меня есть проект меньшего масштаба. Я считаю, что SubSonic с точки зрения производительности хорошо масштабируется. Однако, я чувствую себя тесно связанным с этим, потому что это так выгравировано в моем проекте. В меньшем проекте я все еще могу отключить его, потому что кодовая база очень мала, и это действительно помогает мне вырвать код, как объявлено.
4 голосов
/ 16 сентября 2008

Опять немного не по теме, но я буду второй Castle ActiveRecord - вместо того, чтобы использовать базу данных в качестве модели (дозвуковой подход) или проводить часы в спагетти XML (подход NHibernate), вы просто помещаете атрибуты в ваши модели классов.

Вы можете даже заставить ActiveRecord сгенерировать схему базы данных для вас.

Мы уже использовали этот подход на многих проектах, и его преимущества заключаются в следующем:

  • Простой способ обновления до NHibernate, если потребуется в будущем
  • Поддержка моделей простого наследования - например. Автомобиль -> Автомобиль
  • Сгенерированная им схема, скорее всего, такова, как вы бы ее создали, так что вы можете потратить больше времени на создание приложения, не беспокоясь о синхронизации вашей модели / базы данных.
3 голосов
/ 02 октября 2008

Учитывайте размер вашей команды и проекта при рассмотрении ActiveRecord.

По моему опыту, ActiveRecord - это абстракция поверх NHibernate, которая начинает просачиваться, как решето, при попытке выполнить более сложные сценарии.

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

Другое место, где вы можете столкнуться с проблемами, - это когда вам нужен умеренно сложный запрос. ActiveRecord скрывает большую часть реализации NHibernate ... но она вам понадобится для сложного запроса, который станет очень сложным, если вы совершенно не знакомы с HQL. Будьте осторожны, члены команды не просто лезут за края, а не изучают NHibernate и HQL.

...