Сведения о вопросе

Drake

16:03, 1st July, 2020

Теги

.net   nhibernate   orm   subsonic    

Subsonic против NHibernate

Просмотров: 522   Ответов: 15

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



  Сведения об ответе

ASER

18:03, 1st July, 2020

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

Сделка-perf-wise, SubSonic масштабируется очень красиво. С точки зрения роста проекта-ANY инструмент, который вы используете, потребует вашего внимания. Даже 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/

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


  Сведения об ответе

VERSUION

18:03, 1st July, 2020

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

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


  Сведения об ответе

lats

18:03, 1st July, 2020

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

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


  Сведения об ответе

darknet

18:03, 1st July, 2020

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

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


  Сведения об ответе

screen

18:03, 1st July, 2020

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


  Сведения об ответе

pumpa

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

dumai

18:03, 1st July, 2020

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


  Сведения об ответе

nYU

18:03, 1st July, 2020

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

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


  Сведения об ответе

baggs

18:03, 1st July, 2020

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

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

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

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


  Сведения об ответе

SILA

18:03, 1st July, 2020

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

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


  Сведения об ответе

dumai

18:03, 1st July, 2020

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

Наш другой вариант-создать некую промежуточную точку, где мы используем subsonic для запроса и загрузки произвольных объектов с их функциональностью "execute as typed list", которая делает сопоставление на основе имени произвольного оператора linq style sql. Или попытаться воссоздать некоторые из них в nhibernate и рефакторировать rest.

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


  Сведения об ответе

repe

18:03, 1st July, 2020

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

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

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

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


  Сведения об ответе

ITSME

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

#hash

18:03, 1st July, 2020

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

проверить это :)

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


  Сведения об ответе

PROGA

18:03, 1st July, 2020

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться