Мне нужны некоторые разъяснения по архитектуре MVC и трехуровневой архитектуре - PullRequest
11 голосов
/ 22 июня 2009

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

  1. Я знаю, что MVC должен разделить функциональность на три основные вещи: Модель -> Контроллер -> Вид. Является ли MVC другим подходом, чем трехуровневая архитектура? Или я все еще думаю о создании уровня доступа к данным и уровня бизнес-логики в моем проекте?

  2. Что такое хранилища? Это то, что действует как мой уровень доступа к данным? Где / Как репозитории вписываются в MVC?

  3. В книге рассказывается об использовании LINQ to SQL для взаимодействия с базой данных, но в то же время говорится, что LINQ to SQL не будет поддерживаться в будущем и что Microsoft отказывается от него для Entity Framework. Где Entity Framework вписывается в MVC и как с ним взаимодействовать?

Заранее благодарим за помощь!
Matt

Ответы [ 4 ]

7 голосов
/ 22 июня 2009
  1. MVC - это, в основном, шаблон для уровня представления, который фокусируется на взаимодействии между представлением и контроллером. Модель можно считать компонентами приложения, отвечающими за поддержание состояния , включая постоянство.

    В простом приложении модель может быть просто моделью LINQ-To-SQL. В крупном корпоративном приложении модель может содержать уровень доступа к данным, бизнес-уровень и уровень домена. ASP.NET MVC не ограничивает вас тем, как должен быть реализован M.

  2. Шаблон Репозиторий - это один из способов реализации персистентной части M. ActiveRecord - это другой. Какой шаблон выбрать, зависит от сложности приложения и ваших предпочтений.

    Взгляните на Шаг 3 учебника NerdDinner, где они создают простой репозиторий с использованием Linq to SQL.

  3. Linq to SQL не будет мертвым. Microsoft по-прежнему будет улучшать ядро ​​и добавлять запросы клиентов там, где это имеет смысл, но Entity Framework будет в центре внимания. Посмотрите на этот пост LINQ to SQL изменения в .NET 4.0 .

    EF можно использовать аналогично LINQ to SQL, но он также более гибкий, поэтому его можно использовать и другими способами. Например, EF4 будет более или менее поддерживать постоянство ваших собственных объектов POCO в более управляемой доменом конструкции.

6 голосов
/ 22 июня 2009

Да, я думаю, что MVC - это другой подход, нежели «трехуровневая архитектура», которую, я думаю, вы имели в виду здесь (архитектура, в которой вы создаете в основном 3 проекта DAL, BL и UI). Основная идея MVC - разделение проблем между каждым из его компонентов (Модель, Представление и Контроллер). Контроллер является компонентом, отвечающим за обработку пользовательских запросов, и в большинстве случаев он объединяется с компонентом «Модель» для отображения желаемого представления в качестве ответа на пользовательский запрос. Разница между этим и традиционной 3-уровневой архитектурой заключается в том, что DAL и BL теперь сгруппированы и называются Model, а да, вам все еще нужно создавать эти компоненты.
Что такое репозитории?
Мартин Фаулер упоминает определение хранилища как «Посредничество между слоями домена и сопоставления данных с использованием интерфейса, подобного коллекции для доступа к объектам домена» Репозитории являются частью уровня доступа к данным они не обращаются к данным самостоятельно, они являются посредниками между доменом и объектами отображения данных, и, конечно, они должны быть помещены в папку / проект вашей модели.

Будет ли Linq to SQL устаревшим?
NO и в той же книге говорится, что Дамьен Гард (разработчик из команды ADO.NET) упомянул в одном из своих постов в блоге, что Linq to SQL будет включен в .NET 4.0.

Как взаимодействовать с EF?
Как и в случае с Linq для SQL. Как и Linq to SQL, Entity Framework будет вашим картографическим объектом и будет также находиться в проекте Model.
Надеюсь, это поможет!

1 голос
/ 22 июня 2009

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

  1. N-Tiered Architecture и MVC различны, но взаимосвязаны. N-Tier обычно говорит о разделении доступа к данным, бизнес-логики и пользовательского интерфейса. Тем не менее, некоторые люди могут утверждать, что невозможно полностью отделить BLL от интерфейса пользователя; MVC решает эту проблему таким образом, что соответствующий Контроллер обращается к вашему BLL и к вашему View, а не к тому, чтобы ваш View говорил напрямую с вашим BLL.

  2. Да, наличие хранилищ является одним из подходов к использованию DAL . Есть много способов сделать это, и вы не должны ограничивать себя тем, что обсуждается в книге.

  3. Книга использует LINQ to SQL только для демонстрации ASP.NET MVC самым быстрым из возможных способов, но это НЕ единственный способ. Перестаньте думать о LINQ to SQL на минуту; ASP.NET MVC можно использовать независимо от того, используете ли вы ORM, например, NHibernate, или же вы используете обычную ADO.NET + DAL Factory или что-то еще - вы не сможете использовать те ASP.NET ObjectDataSources, которые вы перетаскиваете. и перейдите с вашим пользовательским интерфейсом.

Что касается Entity Framework, Брэд Абрамс написал замечательное руководство по , как использовать Entity Framework с ASP.NET MVC , которое должно охватывать ваш последний вопрос.

НТН

0 голосов
/ 22 июня 2009
  1. Да, вам все равно нужно самостоятельно создавать слои доступа к данным и бизнес-логики. Некоторые могут утверждать, что уровень контроллера IS - бизнес-логика, но я лично предпочитаю разделение между реальной бизнес-логикой (например, расчет цены) и бизнес-логикой экрана (например, обработчик события для кнопки «ОК»). Затем вы будете вызывать их из вашего класса Controller. Класс контроллера управляет логикой вашего экрана и управляет переводом из уровня данных / бизнес-логики в экранное значение.

  2. платформа ASP.NET MVC не накладывает никаких ограничений на слой «Модель», что означает, что вы можете использовать все, что захотите, включая NHibernate, LINQ to SQL или инфраструктуру сущностей. Я использую LINQ to SQL, потому что это просто.

  3. Не уверен, никогда не читайте эту книгу. Я только что загрузил проект Скотта Хансельмана Nerddinner из codeplex и использую его как руководство для написания веб-сайтов ASP.NET MVC.

...