Дозвуковой Vs NHibernate

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

15 ответов

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

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

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

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

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

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

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

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

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

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

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

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

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

    Сделка-perf-wise, дозвуковые масштабы очень красиво. С точки зрения роста проекта — любой инструмент, который вы используете, потребует вашего внимания. Даже NHibernate.

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

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

    Также я написал пост о выступлении SubSOnic:

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

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

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

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

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

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

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

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

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

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

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

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

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

    • NHibernate мой выбор для проектов большого масштаба потому что свои пользы облегченного POCO. Если бы я когда-нибудь выключил свой ORM «I believe», это было бы намного легче рефакторировать.
    • Дозвуковой мой выбор, когда у меня есть проект меньшего масштаба. Я считаю, что производительность дозвуковых масштабов хорошо. Однако я чувствую себя тесно связанным с ним, потому что он так выгравирован в моем проекте. В меньшем проекте я все еще могу переключить его, потому что база кода настолько мала, и это действительно помогает мне вырвать код, как объявлено.
  12. Примите несоответствие импеданса!

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

    🙂

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

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

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

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

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

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

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