Нужен совет по запуску New Life с MVC 2 и какие инструменты использовать для RAD в MVC2? - PullRequest
1 голос
/ 31 октября 2010

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

Многоуровневая архитектура: -
Модель (слой, который связывается с базой данных). EF4
Репозиторий (слой, который связывается с моделью и включает все запросы)
Бизнес-уровень (проверки, вспомогательные функции, обращения к хранилищу)
Контроллеры (контролирует поток приложения и отвечает за предоставление данных для представления из бизнес-уровня.)
Просмотры (пользовательский интерфейс)

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

Я использую AutoMetaData t4 шаблон для проверки. Я также наткнулся на FluentValidation , но не могу найти много на нем. С кем мне идти?

Какой View Engine выбрать?
Razor View Engine Была Любовь с первого взгляда. Но он все еще находится в бета-версии, и я думаю, что будет нелегко найти примеры этого. Я прав?
Искра .. Я тоже не могу найти много на этом и не хочу застрять где-то посередине, крича о помощи, когда некому слушать ...: - (

Шаблоны T4 автоматически генерируют представления, и я могу настроить их так, чтобы они создавались так, как я хочу? Будет ли это возможно с помощью бритвы и искры или мне придется создавать их вручную?

Есть ли способ автоматического создания хранилищ?

Буду очень признателен, если увижу проект, основанный на архитектуре выше.

Пожалуйста, дайте мне знать, если это хорошая архитектура для подражания.
У меня есть некоторая путаница на бизнес-уровне, как это действительно необходимо?

Ответы [ 4 ]

0 голосов
/ 08 ноября 2010

Иногда проще выучить шаблоны из кода: Sharp Architecture - это конкретная реализация передового опыта в MVC с использованием DDD.

0 голосов
/ 31 октября 2010

Я настоятельно рекомендую книгу ASP.NET MVC2 в действии.Эта книга хорошо освещает экосистему библиотек, которые используются для создания поддерживаемого приложения ASP.NET MVC.

Что касается выбора движков представления, это может зависеть от вашего фона.Я лично предпочитаю, чтобы мой взгляд выглядел как можно больше как HTML, поэтому я бы выбрал Spark.С другой стороны, если вы привыкли работать с ASP.NET classic, механизм представления WebForms может помочь вам быстрее начать работу.

0 голосов
/ 01 ноября 2010

Пожалуйста, дайте мне знать, если это хорошая архитектура для подражания?

Это хорошее начало - единственное, что я бы предложил вам добавить, это слой абстракции между вашей бизнес-логикой и доступом к данным (т. Е. Инверсия / внедрение зависимости) - см. Это: Введение в инверсию зависимости .

я знаю, что это не обязательно, но я думаю, что это делает проект более профессиональным: -)

* +1016 * Ха! Обычно вы обнаружите, что многие «вещи» не являются необходимыми - вплоть до того момента, когда это происходит, когда обычно уже слишком поздно.

Просмотр двигателей: я сам еще новичок в ASP.NET MVC и поэтому не знаком с механизмами просмотра, о которых вы говорите; на вашем месте я бы придумал несколько тестовых сценариев, а затем попытался бы использовать их для каждого продукта, чтобы вы могли напрямую сравнить их. Часто вам нужно взять тест-драйв, чтобы он был более комфортным - хотя это может занять некоторое время, но обычно оно того стоит.

Изменить:

Если я предложу этот слой своему премьер-министру и укажу ему две вышеуказанные причины, то я не думаю, что он примет его

Во-первых, PM - это не технических отведений (обычно); Вы несете ответственность за дизайн решения, а не PM. Это не редкость, по моему опыту, большую часть времени премьер-министр даже не подозревает, что он посягает на ваш газон, что не так. Дело не в том, что я «политический захватчик земли», я просто склонен думать о «разделении интересов», и, я уверен, вы понимаете.

Как дизайнер / архитектор, вы должны интерпретировать требования и (принимая во внимание бизнес-приоритеты) найти решение, обеспечивающее наилучшую «платформу» в будущем.

(Относительно DI). Мой вопрос, действительно ли оно того стоит?

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

Если вы ответите «да» на любой из этих вопросов, лучше использовать DI:

  • Система нетривиальна
  • Ожидаемый срок службы системы больше, чем (не знаю, какая здесь правильная цифра, вероятно, ее нет, поэтому я собираюсь поставить ставку на землю) на 2 года.
  • Система и / или ее требования являются текучими.
  • Разделение работы (BL / DAL) на разные команды будет выгодно для проекта (возможно, вы являетесь частью распределенной команды).
  • Система предназначена для рынка с разнообразным техническим ландшафтом (например, не каждый захочет использовать MS SQL).
  • Вы хотите выполнить качественное тестирование (это упростит процесс).
  • Система большая / сложная, поэтому возможно разделение функциональности и ее использование в других системах.
  • Вы хотите предложить более одного способа хранения данных (скажем, хранилище на основе файлов бесплатно и хранилище на основе базы данных за плату).
  • Бизнес-драйверы / среда нестабильны - что, если они придут к вам и скажут: «Это отлично, но теперь мы хотим предложить облачную версию, можете ли вы установить ее на Azure?»

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

С точки зрения того, сколько усилий требуется ...

Одноразовые задачи (помимо ускорения работы команды):

  • Написание загрузчика провайдера или выбор DI Framework. Как только вы это сделаете, он будет многократно использоваться во всех ваших проектах.

«Новые» общие задачи (при условии, что вы придерживаетесь подхода, принятого в статье):

  • Определение интерфейса (на бумаге) - это то, что вы будете делать прямо сейчас, за исключением того, что вы можете этого не осознавать. По сути, это OO Design, но так как это будет формальный интерфейс между двумя или более пакетами, вам нужно подумать (и да, вы все равно можете его реорганизовать - но в идеале интерфейс должен быть «стабильным» и не сильно меняться; если он действительно изменится, лучше «добавить», чем «удалить или изменить» существующих членов).
  • Написание кода интерфейса. Это очень быстро (минуты, а не часы), так как вы не пишете никакой реализации; и когда вы приступите к реализации, вы можете использовать инструменты, предоставляемые вашей IDE, для создания заглушек кода на основе интерфейса.

То, что вы делаете сейчас, что вы делаете по-другому:

  • Создание переменной (в ваших классах BL) для хранения провайдера, возможно, через фабрику. Написание этого не должно занять много времени (опять же, минуты, а не часы), и это довольно простой код для копирования, вставки и рефакторинга, где это необходимо.
  • Написание кода DAL: должно быть таким же, как и раньше.
0 голосов
/ 31 октября 2010

Это очень широкий вопрос.Я решил использовать функцию автоконфигурации Fluent NHibernate для нового приложения, и был весьма впечатлен.Многие мои коллеги используют CakePHP, и ему нужно было очень мало настроек, чтобы он мог генерировать схему базы данных, совместимую с использованием тортов по умолчанию, что отлично для нас.

...