Подсоническое Vs NHibernate

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

Ответ 1

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

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

Я написал сообщение о том, как использовать шаблон репозитория с 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/

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

Насколько велик проект? Нужна ли долгосрочная поддержка? Является ли экономическая эффективность Subsonic для компенсации любых возможных проблем масштабирования?

Ответ 10

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

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

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

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

Ответ 11

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

Другим вариантом является создание некоторой средней площадки, где мы используем дозвуковой запрос и загрузку произвольных объектов с их функциональностью "выполнить как введенный список", которая выполняет сопоставление имен, основанных на произвольном выражении sql-стиля linq. Или попытаться воссоздать некоторые из них в nhibernate и рефакторинг остальных.

Итак, я говорю, что дозвуковое имеет смысл в небольших приложениях, но обслуживание дозвуковых приложений становится довольно волосатым, у нас особенно трудные времена с перекрывающимся кодом проверки и pre/post в событиях, вызванных кодом. Для активного шаблона записи субзвук определенно на 80%, но делает что-то по-разному и останавливает вас от реального контроля над вашей иерархией наследования, поскольку каждый класс должен наследовать таблицу, чтобы вернуться к этой таблице.

Ответ 12

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

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

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

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

Ответ 13

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

Я видел большие проекты с использованием SubSonic, тогда как NHibernate уже знаменит и широко используется.

Решение о выборе ORM не зависит только от самого ORM.

Ответ 14

Объявите несоответствие импеданса!

проверьте это

:)

Или нет. Если вы хотите производительности, сделайте это сами. Если вы хотите это быстро и легко, перейдите в NHibernate и ActiveRecord. Если вам нравится притворяться, что вы действительно знаете, что происходит на уровне доступа к данным, используйте NHibernate и сидите с XML весь день, чтобы получить много ко многим... Или просто... err.. сделайте это самостоятельно - ADO.Net FTW!

Ответ 15

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

Поэтому я больше заинтересован в использовании NHibernate для сложных случаев, Castle Active Record для более простых случаев, и я слежу за Fluent NHibernate, который должен сделать отображение NHibernate намного проще (особенно после улучшения поддержки отображения на основе конвенций).