Выбор ORM для «простого» запуска SaaS (ASP.NET MVC) - PullRequest
4 голосов
/ 10 ноября 2009

Я собираюсь приступить к разработке веб-приложения, которое лучше всего описать как специализированную версию приложения управления контактами Highrise от 37Signal, предназначенного для таких сервисных предприятий, как уход за газонами. Я решил использовать ASP.NET MVC, чтобы воспользоваться преимуществами моего членства в BizSpark и использовать уже знакомый мне C # / ASP.NET / SQL Server.

Я провожу небольшое исследование, чтобы выбрать ORM для проекта; Я не уверен, стоит ли мне использовать что-то легковесное, такое как LINQ to SQL, или использовать большие возможности NHibernate. На данный момент я не рассматриваю приложение как слишком сложное. У меня по сути есть эти модели:

  • Счет
  • Пользователь (предоставляется ASP.NET, но мне может потребоваться его расширить)
  • Клиент
  • Работа

, где применяются следующие бизнес-правила:

  1. Учетная запись является основной записью (поскольку она представляет подписчика), а все остальное (пользователи, клиенты, задания) отключается
  2. Клиент может иметь более одной работы
  3. Существует два типа клиентов: «ведущий» и «клиент». Идея состоит в том, что клиенты могут запросить продолжение из формы, которую мы предоставляем, и автоматически добавляются в базу данных клиентов учетной записи, а затем сотрудник может проследить и запланировать работу, которая "преобразует" лидерство
  4. Задание может быть одноразовым или заданным по расписанию (например, каждые две недели, раз в месяц)

У меня плохая привычка пытаться переусердствовать в архитектуре. Похоже, что LINQ to SQL сразу удовлетворит мои потребности, но меня беспокоит масштабируемость в будущем и то, смогут ли авансовые затраты на использование более многофункционального ORM, такого как Entity Framework или NHibernate, компенсировать себя эффективностью запросов и оптимизация. Я рассматриваю возможность использования Windows Azure для размещения приложения.

Есть мысли?

Ответы [ 6 ]

4 голосов
/ 10 ноября 2009

Ваша модель кажется достаточно простой, чтобы ее поддерживали Linq2Sql, Entity Framework и NHibernate.

Самый большой выбор, который вам нужно сделать, это то, хотите ли вы следовать подходу, основанному на домене, для моделирования программного обеспечения или вы хотите работать с вашими объектами как строками базы данных. Если вы хотите получить фантазию при отображении строк в объекты, NHibernate - лучший выбор. Если вас устраивает 1: 1 между вашими бизнес-объектами и строками базы данных Linq2Sql и Entity Framework, то все в порядке.

NHibernate и в некоторой степени Entity Framework поддерживают объекты POCO, которые не наследуются от базового класса и могут не знать о своих требованиях к постоянству. Linq2Sql может, но это странно и странно.

Что касается масштабирования, то все три из этих инструментов ORM позволят вам продвинуться довольно далеко, однако AFAIK NHibernate имеет больше возможностей, когда речь идет о разделении серверов баз данных и обработке идентификаторов между базами данных, и даже имеется некоторая поддержка Sharding в работе.

NHibernate также поддерживает большинство провайдеров, вы можете перейти от MSSql к MySql в течение часа, с Linq2Sql и EF (хотя поддержка не ожидается), вы не можете)

Итак, TL; DR:

  • NHibernate, если вам нужна лучшая поддержка POCO, больше возможностей масштабирования и «есть сопоставление для этих» функций отображения строк-> объектов. FluentNHibernate потрясающий. У вас есть поддержка нескольких провайдеров
  • Entity Framework, если вы хотите получить лучшую поддержку графического интерфейса дизайнера и готовы ждать EF4, vs2010 - полнофункционального ORM.
  • Linq2Sql, если вам нужен простой доступ к БД.

Я использовал все три, и я менее всего доволен EF1, EF4 лучше, но не так хорош, как NHibernate.

Я использую EF4 с VS 2010 для всех будущих приложений "простого CRUD" и NHibernate, когда мне нужно стать модным.

2 голосов
/ 10 ноября 2009

Мой опыт показывает, что "первоначальные затраты" Entity Framework примерно такие же, как LINQ-to-SQL для простых моделей данных (при условии, что у вас есть существующая схема базы данных для работы).

Серия учебных пособий по настройке и запуску простой модели Entity Framework.

Я не из тех, кто "LINQ-to-SQL мертв!" люди, но похоже, что Microsoft намерена инвестировать больше в Entity Framework в будущем. Это для меня немного склоняет чашу весов в пользу L2S. Блог команды ADO.NET - хорошее место, чтобы следить за этим.

1 голос
/ 10 ноября 2009

Я сейчас завершаю приложение asp.net mvc. Мы использовали архитектуру S # arp. Это «фреймворк», позволяющий разработчикам использовать NHibernate, Fluent и множество других инструментов передового опыта (DI и т. Д.). Вот ссылка на сайт.

http://wiki.sharparchitecture.net/

Наша команда очень любит этот продукт и рекомендует всем добавлять его в свой технический арсенал при выборе путей к архитектуре.

1 голос
/ 10 ноября 2009

Вдохновленный движком, работающим на stackoverflow.com, я работал над созданием полноценного решения CRM и бизнес-в-коробке в течение последних нескольких месяцев. У меня было много оговорок по поводу использования LINQ to SQL в качестве ORM (обсуждение на stackoverflow.com и в других местах указывало на тот факт, что среда Entity была «в деле»), однако я обнаружил, что LINQ to SQL - это бриз для работы с, даже с его известными ограничениями. С помощью LINQ-to-SQL я мог бы создать полнофункциональный прототип CRM в течение нескольких недель. В настоящее время CRM находится на поздних стадиях бета-тестирования с небольшим количеством клиентов, и некоторые из них имеют довольно большой объем использования (тысячи потенциальных клиентов и несколько десятков пользователей). До сих пор я не видел каких-либо заметных проблем с ORM / базой данных.

Я написал довольно много хранимых процедур SQL (и использовал их с LINQ to SQL), где требовались очень сложные объединения. Поскольку я пришел из среды SQL / Microsoft Enterprise Library, мне легче писать сложные хранимые процедуры на SQL и сохранять основные операции CRUD на уровне LINQ to SQL

indyfromoz

1 голос
/ 10 ноября 2009

Возможно, вы захотите рассмотреть SubSonic. Похоже, он нацелен прямо на ваше любимое место.

После этого я бы рассмотрел NHibernate. У NHibernate есть минимальные недостатки, и он может эффективно «уменьшиться» до вашего проекта. С NHibernate вы не ограничиваете себя в ограниченном наборе функций, как в случае с Microsoft ORM и SubSonic.

0 голосов
/ 11 ноября 2009

Я бы порекомендовал это:

  1. S # arp Архитектура. Он использует NHibernate, но с высокой степенью предварительной настройки, поэтому вы можете приступить к работе буквально за несколько минут - не только с данными, но и с MVC и другими полезными вещами.
  2. Реализация ActiveRecord, а именно Замок ActiveRecord . Это очень прост в использовании, но все же вам нужно немного понять NHibernate.
  3. Linq to SQL с шаблоном репозитория. Вы выиграете от простоты L2S, пока будете готовы к будущим изменениям. Просто поищите в Google "linq to sql repository".

Как сказал мой бывший босс: «Неважно, что вы выбираете, важно выбрать что-то и начать работать»; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...