Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Subsonic против NHibernate
Каково же общее мнение о том, когда следует использовать один из этих инструментов по отношению к другому? Я нахожу Subsonic очень полезным с точки зрения быстрого выполнения задач, но в больших проектах он имеет тенденцию не масштабироваться, и это связывает вашу модель домена с вашей моделью базы данных. Именно здесь появляется Nhibernate, поскольку он дает вам облегченные POCOs, которые не связаны с вашей моделью базы данных, но время настройки намного больше.
Мне часто задают этот вопрос, и на самом деле все сводится к тому, сколько вы хотите 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/
Надеюсь, это поможет.
Я бы рекомендовал SubSonic, если ваш проект работает с представлением ActiveRecord, что база данных является вашей моделью. Вы получите один класс за столом, и все просто волшебно работает. Вы, конечно, можете настроить и переопределить вещи, но если вы (или ваш проект) принципиально не согласны с подходом class-per-table, я бы посмотрел на NHibernate, поскольку он начинается с более сложного (но более гибкого) подхода отображения модели домена в вашей базе данных.
Если вы используете относительно простую базу данных, которая находится под вашим контролем (например, вы можете изменить столбцы, не отправляя восемь форм в контрольную комиссию отдела баз данных), я бы рекомендовал начать с SubSonic и перейти к NHibernate, если SubSonic не соответствует вашим потребностям.
За то, что его worth...I имели возможность использовать обе технологии довольно abit больше с момента постановки этого вопроса. И я должен остаться, который, если эти технологии вы выбираете, имеет очень мало значения. Конечно, NHibernate позволяет вашим бизнес-объектам быть немного менее связанными с вашей структурой базы данных, но я все еще нахожу, что есть много случаев, когда вам все еще приходится подчиняться воле базы данных.
На мой взгляд, единственный верный способ полностью отделить вашу доменную модель от модели базы данных-это написать свой собственный DTOS (по сути POCOs для передачи данных), а затем сопоставить их с вашим ORM по выбору в вашем слое данных. Но в большинстве случаев такой подход принесет мне больше хлопот, чем пользы.
Немного не по теме, но в том же духе. Вы смотрели на замок ActiveRecord он написан поверх NHibernate и избавляет от необходимости тратить время на создание XML отображений из кода в базу данных. Как и NHibernate, вы можете структурировать доменные объекты по своему усмотрению, а затем создать схему базы данных из этой структуры.
С помощью инструмента ActiveWriter, внесенного в базу данных, вы можете легко сопоставить объекты домена из своей базы данных.
Вы можете подумать о том, чтобы посмотреть на Fluent NHibernate; это делает управление NHibernate легким ветерком. Не знаю, насколько сложно было бы перенести существующую схему, но если вы создаете новое приложение, то неплохо определить модель домена и создать базу данных практически на любом сервере DB, который вы можете придумать. Из чтения других комментариев здесь я думаю, что Fluent NHibernate приносит NHibernate наравне с SubSonic для простоты настройки.
Я не могу дать хорошее сравнение, так как я еще не использовал NHibernate в проекте, но я использовал SubSonic и был очень доволен им. До сих пор я не сталкивался с какими-либо серьезными препятствиями при его использовании.
Посмотрите этот пост от Роба Конери, одного из создателей SubSonic. Он рассказывает о том, как отделить ваш код SubSonic от кода rest приложения. Он даже упоминает тот факт, что эта архитектура позволит вам позже заменить SubSonic на какой-то другой уровень доступа к данным, такой как NHibernate или LINQ на SQL.
Я знаю, что на самом деле не ответил на ваш вопрос, но я надеюсь, что это все еще помогает.
Недавно я написал сообщение в блоге о .NET ORMs, в котором есть Subsonic и ActiveRecord. По моему опыту, это зависит от того, что делает проект, Subsonic работает намного лучше, если вы исходите из фона SQL, но NHibernate имеет больше на вершине. ActiveRecord хорошо подходит для небольших проектов, но я не уверен, что это быстрее для больших проектов, чем придерживаться NHibernate.
Я оценил оба варианта и считаю, что было бы несправедливо рекомендовать один из них вместо другого, не понимая, каковы ваши цели. В своем вопросе вы хорошо сформулировали различия, и я считаю, что это должно быть вашим решающим фактором. Лично я использовал и то и другое и буду продолжать использовать в зависимости от проекта.
- NHibernate-это мой выбор для более масштабных проектов, потому что он использует легковесные POCO. если бы я когда-нибудь переключил свой ORM "I believe", это было бы намного проще рефакторировать.
- SubSonic-это мой выбор, когда у меня есть проект меньшего масштаба. Я считаю, что performance wise SubSonic хорошо масштабируется. Однако я чувствую себя тесно связанным с ним, потому что он так выгравирован в моем проекте. В меньшем проекте я все еще могу переключить его, потому что кодовая база настолько мала, и это действительно помогает мне вырвать код, как рекламируется.
Опять же немного не по теме, но я повторю, что ActiveRecord -вместо того, чтобы использовать базу данных в качестве модели (Subsonic подход) или тратить часы на XML спагетти (NHibernate подход), вы просто размещаете атрибуты в своих классах моделей.
Вы даже можете получить ActiveRecord для создания схемы базы данных для вас.
Мы уже использовали этот подход на довольно многих проектах, и его преимущества заключаются в следующем:
- Легкий путь обновления до NHibernate, если потребуется в будущем
- Поддержка простых моделей наследования -например. Автомобиль - > Транспортное Средство
- Схема, которую он генерирует, скорее всего, так же, как вы бы ее создали в любом случае, поэтому вы можете потратить больше времени на создание приложения, а не беспокоиться о синхронизации вашей модели/БД.
Я думаю, что вы в значительной степени пригвоздили его. Subsonic генерирует код, поэтому ваши бизнес-объекты будут отражать структуру вашей базы данных. nHibernate использует файлы сопоставления, которые сопоставляют ваши бизнес-объекты с базой данных, так что ваши объекты могут быть структурированы так, как вам нравится.
Насколько велик этот проект? Будет ли необходима долгосрочная поддержка? Будет ли экономическая эффективность Subsonic компенсировать любые потенциальные проблемы масштабирования?
Мы загрузились с subsonic и теперь пытаемся оценить, собираемся ли мы переключиться на nhibernate теперь, когда мы находимся в болевых точках subsonic.
Наш другой вариант-создать некую промежуточную точку, где мы используем subsonic для запроса и загрузки произвольных объектов с их функциональностью "execute as typed list", которая делает сопоставление на основе имени произвольного оператора linq style sql. Или попытаться воссоздать некоторые из них в nhibernate и рефакторировать rest.
Поэтому я говорю, что subsonic имеет смысл в небольших приложениях, но обслуживание на subsonic приложениях становится довольно волосатым, у нас особенно трудные времена с перекрывающимся кодом проверки и предварительными/постовыми событиями в коде. Для активного шаблона записи subsonic определенно является 80%, но делает что-то не так и мешает вам иметь какой-либо реальный контроль над вашей иерархией наследования, поскольку каждый класс должен наследовать таблицу, чтобы вернуться к этой таблице.
Учитывайте размер своей команды и проекта при рассмотрении ActiveRecord.
По моему опыту, ActiveRecord-это абстракция поверх NHibernate, которая начинает просачиваться, как решето, при попытке более сложных сценариев.
Если у вас есть умеренно или сильно сложная или не очень простая схема, придерживайтесь NHibernate. Вы можете нарезать и нарезать его кубиками почти до совершенства.
Другое место, где вы можете попасть в беду, - это когда вам нужен умеренно сложный запрос. ActiveRecord скрывает большую часть реализации NHibernate... но он понадобится вам для сложного запроса, который станет очень трудным, если вы совершенно не знакомы с HQL. Будьте осторожны, члены команды не просто рубят по краям вместо того, чтобы изучать NHibernate и HQL.
Я считаю, что вы должны придерживаться того, что вы можете использовать лучше всего. Конечная цель-это производительность и хорошее качество исполнения кода. Если вы знаете SubSonic внутри и снаружи, то придерживайтесь его, а если вы знаете NHibernate в глубине, придерживайтесь NHibernate. Это очень субъективный вопрос. Вы также должны учитывать тот факт, что у вашего члена команды есть опыт работы. Если Вы хороши в этом, вы сможете легко поддерживать его.
Я видел большие проекты, использующие SubSonic, тогда как NHibernate уже известен и широко используется.
Решение о выборе ORM зависит не только от самого ORM.
Примите несоответствие импеданса!
Если вы хотите добиться успеха, сделайте это сами. Если вы хотите, чтобы это было быстро и легко, используйте NHibernate и ActiveRecord. Если вам нравится притворяться, что вы на самом деле знаете, что происходит на уровне доступа к данным, используйте NHibernate и сидите с XML весь день, чтобы получить много ко многим... Или просто так... ошибаться.. сделай это сам-ADO.Net FTW!
Совет, который я получил по этой теме, заключается в том, что Subsonic не масштабируется для обработки более сложных сценариев, и поэтому, если вы пойдете по этому пути, вы в конечном итоге получите работу, пытаясь переключиться на более продвинутый ORM.
Таким образом, я больше заинтересован в использовании NHibernate для сложных случаев, активной записи для более простых случаев и слежу за Fluent NHibernate, который должен сделать отображение NHibernate намного проще (особенно после улучшения поддержки отображения на основе конвенции).