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

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

4.08.2008 16:29:23
15 ОТВЕТОВ

Мне часто задают этот вопрос, и на самом деле все сводится к тому, сколько ты хочешь возиться. Я не могу сказать вам, насколько разрушительными были комментарии Криса Киваса 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/

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

84
12.09.2008 21:54:55
С пристрастием или нет, я провел последние 4 часа, пытаясь выяснить, что легче взять и работать, а кривая обучения с SubSonic кажется очень минимальной по сравнению с NHibernate ...
RSolberg 21.08.2009 06:28:25
В настоящее время я использую дозвуковой Simple-репозиторий для проекта, он действительно прост в использовании, но, к сожалению, медленный и довольно глючный. после просмотра некоторого кода с использованием профилировщика aroudn 20% времени было потрачено на получение значений из базы данных, а остальное - на самих дозвуковых. Вот почему я в настоящее время смотрю на другие решения.
kay.one 6.06.2011 01:08:13
"Медленно и довольно глючно". Это как сказать, что этот комментарий «глупый и довольно неинформативный».
user1151 30.06.2011 21:15:55

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

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

45
6.08.2008 21:47:47

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

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

31
28.09.2011 16:24:58

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

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

13
5.08.2008 05:07:11
Сейчас я играю с CAR в пилотном проекте. Я выбрал его, потому что мне нравится идея ActiveRecord поверх чего-то такого же проверенного, как NHibernate. Если мне не понравится CAR, я могу вернуться к чистому NHibernate. Это дает мне безопасный выход - мне это нравится. Я попробую Subsonic через несколько месяцев для сравнения.
BuddyJoe 8.02.2009 03:01:15

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

9
4.03.2009 20:17:18
Я согласен. Автоматизация Fluent NHibernate в сочетании с SchemaExport от NHibernate приносит все преимущества SubSonic без каких-либо недостатков.
pondermatic 4.03.2009 20:29:31

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

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

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

7
4.09.2008 19:25:23

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

7
22.11.2011 11:48:38
Указанная вами ссылка не работает. Вы имеете в виду это? shrinkrays.net/articles/a-look-at-dotnet-orms.aspx
kimsk 25.03.2009 13:09:56

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

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

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

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

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

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

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

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

3
4.08.2008 17:12:53

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

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

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

3
30.08.2008 06:18:34

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

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

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

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

3
2.10.2008 19:26:10

Примите несоответствие импеданса!

Проверь это

:)

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

2
8.02.2009 01:51:26
Тот же Стивен Форте, который сейчас (по состоянию на декабрь 2010 года) говорит: «По мере того, как современное поколение инструментов ORM продолжает развиваться, они становятся более гибкими и простыми в использовании, что побуждает все больше разработчиков взглянуть на интеграцию ORM в свои архитектуры приложений. ». Нет ничего лучше времени, чтобы привести человека в чувство! :-) devproconnections.com/article/tools-and-products/…
rsenna 21.01.2011 15:38:51

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

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

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

2
3.11.2009 05:52:18

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

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

0
25.10.2008 14:20:39
«что Subsonic не масштабируется для обработки более сложных сценариев» Проблема в том, что просто сказать, что это ничего не значит. По-прежнему не хватает достоверных доказательств того, что СС не масштабируется. Я думаю, это доказательство того, что иногда достаточно просто что-то сказать в Интернете.
CarmineSantini 29.03.2009 21:47:05
Если у вас есть доказательства проблем с дозвуковым масштабированием, пожалуйста, предоставьте. У меня лично не было проблем с масштабируемостью SubSonic.
Jim Geurts 9.12.2009 21:45:10