2010-10-31 8 views
1

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

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

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

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

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

T4 шаблоны auto generate мнения и я могу настроить их, чтобы генерировать взгляды, как я хочу? будет ли это возможно с бритвой и искры, или я должен создать их вручную?

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

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

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

+0

Вопрос для вас - что вы видите как разницу между BL и моделью? Вы говорите о них, как будто они разные, но ИМХО, они то же самое. –

+0

IMHO, модель - это уровень доступа к данным «Разговорный DAL».Уровень, который фактически обменивается данными с базой данных. Если бизнес-уровень является тем, который заботится обо всех бизнес-логиках, вспомогательных функциях Validations и т. Д. BUsiness Layer отвечает за предоставление данных DAL, тогда как ответственность DAL заключается только в том, чтобы сообщать запросы Business Layer к БД. – user492911

ответ

0

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

+0

Спасибо за все ответы .... Просьба посоветуйте некоторые инструменты/практики, чтобы сделать эту архитектуру намного более подходящей для RAD (большинство проектов имеют очень строгие временные рамки). – user492911

0

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

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

0

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

Это прекрасный старт - единственная вещь, которую я хотел бы предложить вам добавить это слой абстракции между вашей бизнес-логики и доступа к данным (т.е.: Dependency Inversion/Injection) - см это: An Introduction to Dependency Inversion.

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

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

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

Edit:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я прочитал статью об инверсии зависимостей, и я думаю, что ее действительно здорово, когда разные члены команды работают над DAL n BAL и т. Д., Или когда ваша база данных будет изменена в будущем. Он фактически удаляет зависимость поставщика данных, но за счет дополнительных накладных расходов на кодирование. Мой вопрос: действительно ли это стоит? Если я предлагаю этот слой моему PM и дам ему две вышеуказанные причины, то я не думаю, что он примет его, так как большую часть времени каждый разработчик работает на его DAL/BAL, а Change in DB wud будет наименьшим из его проблем. – user492911

+0

за такой информативный ответ. я пришел к выводу, что если что-то, что требует такого небольшого времени, может быть настолько полезным, то оно должно быть использовано. Один вопрос. во многих проектах я видел репозитории и irepositories (DI) в том же проекте. Это хорошая практика? или я буду хранить его в отдельном проекте? – user492911

0

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