Мне нужно уточнить архитектуру MVC и трехуровневую архитектуру

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

  • Я знаю, что MVC должен разделить функциональность на три основные вещи: Model → Controller → View. Является ли MVC другим подходом, чем трехуровневая архитектура? Или я все еще должен думать о создании уровня доступа к данным и уровня бизнес-логики в моем проекте?

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

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

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

Ответ 1

  • MVC в основном представляет собой шаблон для уровня представления, и он фокусируется на взаимодействии между представлением и контроллером. Модель может считаться компоненты приложения, которые отвечают за сохранение состояния, включая сохранение.

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

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

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

  • Linq to SQL не будет мертв. Microsoft все равно улучшит основное ядро ​​и добавит запросы клиентов, где это имеет смысл, но Entity Framework будет основным направлением. Взгляните на этот пост для Изменения LINQ to SQL в .NET 4.0.

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

Ответ 2

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

Мартин Фаулер упоминает определение репозитория как "Промежуточное взаимодействие между слоями отображения домена и данных с использованием интерфейса, подобного коллекции, для доступа к домену объекты" Хранилища являются частью уровня доступа к данным, они не получают доступа к данным сами по себе, они посредничают между доменом и объектами сопоставления данных, и, конечно же, они должны быть помещены в папку/проект модели.

Будет ли linq to SQL устаревшим?

NO, и в той же книге указано, что также Damien Guard (разработчик в команде ADO.NET) упоминает в одном из своих сообщений в блоге, что Linq to SQL будет включен в .NET 4.0.

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

Ответ 3

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

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

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

  • В книге используется только 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, который должен охватывать ваши последний вопрос.

НТН

Ответ 4

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

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

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