2009-06-22 7 views
11

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

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

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

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

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

+6

LINQ to SQL - это ~ НЕ ~ отбрасывается, и в нем указывается так много в вашей книге на Pg. 49. – mmcdole

+0

Кроме того, с точки зрения разницы между MVC и Three-Tier, я предлагаю вам перечитать pg. 41 особенно последний абзац наверху. – mmcdole

+0

Я видел, что он будет включен в ASP.NET 4.0, но я предположил, что он все еще медленно отбрасывается. Хорошо, да, я прочитал этот параграф. Как я уже сказал, со всеми терминами и понятиями, которые меня бросают сразу, я немного запутался и забыл некоторые из вещей, которые я прочитал. Благодарю. – Matt

ответ

7
  1. MVC - это в основном шаблон для слоя презентации, и он фокусируется на взаимодействии между представлением и контроллером. Модель может считаться the components of the application that are responsible for maintaining state, включая постоянство.

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

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

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

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

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

+0

очень информативный ответ.Я должен проголосовать за этот ответ 3 раза! – Martin

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

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

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

+0

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

+0

Прежде всего, я называю это слоем «Модель», потому что этот вопрос касается MVC. Во-вторых, как я уже сказал в моем пункте 1, я обрабатываю «бизнес-логику» в слое «Модель», так что это _NOT_ только о постоянстве. – oscarkuo

+0

Его очень смущает. Я имею в виду, что я никогда не слышал об этой разделительной «экранной бизнес-логике» и «реальной бизнес-логике». Зачем просто говорить логику бизнеса и логику представления, а затем она станет моделью и представлением. Я тоже обрабатываю бизнес-логику в модели, но как она может включать в себя постоянство, была моя точка зрения. Это идет как отдельный слой, если не тогда плохая практика. –

6

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

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

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

1

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

  1. N-Многоуровневое Архитектура и 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, Брэд Абрамс написал хороший путеводитель по how to use Entity Framework with ASP.NET MVC, который должен охватывать ваш последний вопрос.

HTH