2012-03-17 2 views
5

Я пытаюсь найти разницу между MVC и трехуровневой архитектурой в ASP.NET. Я упомянул некоторые предыдущие предыдущие вопросы и некоторые страницы, но мог найти ясный ответ.
Вот аа MSDN страница о реализации MVC: http://msdn.microsoft.com/en-us/library/ff647462.aspxРазница между MVC-контроллером и бизнес-логикой (3 уровня)

Рассмотрим, я ahve этот код:
Одна страница ASPX UI и код, а

<%@ Import Namespace="System.Data" %> 
<%@ Import Namespace="System.Data.SqlClient" %> 
<html> 
    <head> 
     <title>start</title> 
     <script language="c#" runat="server"> 
     void Page_Load(object sender, System.EventArgs e) 
     { 
      String selectCmd = "select * from Recording"; 

      SqlConnection myConnection = 
       new SqlConnection(
        "server=(local);database=recordings;Trusted_Connection=yes"); 
      SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, 
       myConnection); 

      DataSet ds = new DataSet(); 
      myCommand.Fill(ds, "Recording"); 

      recordingSelect.DataSource = ds; 
      recordingSelect.DataTextField = "title"; 
      recordingSelect.DataValueField = "id"; 
      recordingSelect.DataBind(); 
     } 
     </script> 
    </head> 
    <body> 
     <asp:dropdownlist id="recordingSelect" runat="server" /> 
     <asp:button runat="server" text="Submit" OnClick="SubmitBtn_Click" /> 
     </form> 
    </body> 
</html> 

Теперь рассмотрим меня есть различные файлы для
---- Просмотр и Code-за spearated ----
.aspx

<%@ Page language="c#" Codebehind="Solution.aspx.cs" 
    AutoEventWireup="false" Inherits="Solution" %> 
<html> 
     <asp:dropdownlist id="recordingSelect" runat="server" /> 
     </form> 
    </body> 
</html> 

.aspx.cs

using System; 
using System.Data; 
using System.Data.SqlClient; 
public class Solution : System.Web.UI.Page 
{ 
    private void Page_Load(object sender, System.EventArgs e) 
    { 
     if(!IsPostBack) 
     { 
     String selectCmd = "select * from Recording"; 
     SqlConnection myConnection = 
      new SqlConnection(
       "server=(local);database=recordings;Trusted_Connection=yes"); 
     SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection); 
     DataSet ds = new DataSet(); 
     myCommand.Fill(ds, "Recording"); 
     recordingSelect.DataSource = ds; 
     recordingSelect.DataTextField = "title"; 
     recordingSelect.DataValueField = "id"; 
     recordingSelect.DataBind(); 
     } 
    } 
  1. Видя выше msdn page link для Controller класса, я не в состоянии различить разницу между бизнес-логики (которая была бы похожа на средний уровень в трехуровневой архитектуре) и контроллер.
  2. Является ли 3-уровневое и MVC совершенно другим? Является ли приложение ASP.NET в Visual Studio уже разделенным файлом, как в форме MVC? Если они не отличаются, какой из них является предпочтительным?
  3. Что такое структура MVC, если уже есть .aspx и .aspx.cs?

ответ

5

Я на самом деле strugled с этим а в то время как myslef, существуют разные философии о том, как правильно реализовать, так это то, как я понимаю, в моих словах, как я понять связь между различными вещами, вовлеченными (Модели/Views/Контроллеры/Business Logic):

  • Просмотров
    Наличие весь код HTML/JQuery, они используют данные в виде Model экземпляры, которые приходят от контроллера
  • Модели
    классов, которые содержат информацию, на ваш взгляд нужно, чтобы сделать (Список товаров и т.д.)
  • Контроллеры
    • Они принимают входящие запросы
    • сделать необходимые приготовления (извлечение параметров и т. д.) для вызова вашего фактического кода бизнес-логики.
    • Тогда вызов в код бизнес-логики и получить результат
    • Затем они принимают результат и преобразует его в модели, что пользовательский интерфейс понятном
  • Бизнес логика
    Это ваш фактический код бизнес-логики , вызывая db и т. д. Я, мои глаза, полностью отделен от всего объекта MVC, на самом деле он даже не знает, что он выполняется из веб-приложения MVC. Обычно мы помещаем это в другую сборку (библиотеку классов), чтобы убедиться, что нет никакой зависимости от кода MVC.
    Это упрощает модульную проверку только бизнес-логики, поскольку для MVC нет зависимостей.

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

Возвращаясь к вашему вопросу, как все это относится к трехмерной архитектуре ASP.NET.
Можно сказать, что в основном все веб-приложение MVC - это не что иное, как уровень представления (+ подключение уровня презентации с помощью уровня Busines).

Остальные слои остаются отдельными и независимыми от уровня представления, как и раньше.

+0

Это совершенно верно. Я бы также сказал, что представления содержат логику представления, в то время как контроллеры содержат логику приложения в уровне представления. Кроме того, Модель, как правило, является частью бизнес-уровня. –

+0

@BalazsTihanyi На самом деле мы зашли так далеко, что не сделали бизнес-уровень осведомленным о моделях, используемых представлениями, бизнес-уровень использует другой набор «моделей», и результаты сопоставляются с моделями внутри контроллеров (automapper i ' я смотрю на тебя) – ntziolis

0

См here для хорошего сравнения между «слоями» и «уровнями» в архитектуре программного обеспечения/дизайн

Паттерн MVC это все о разделении проблем, а также тот факт, что ваш уровень представления (вид) и бизнес-логику следует разделить. Использование кода позади облегчает загрязнение вод. Вы обнаружите, что новый механизм просмотра ASP.NET (Razor) даже не имеет кода за файлами.

Главное отличие, которое начнет иметь большее значение, если вы хотите проверить логику в своем контроллере автоматически, заключается в том, что контроллер является просто старым классом, но ваш код наследует от System.Web.UI.Page и таким образом, сильно привязан к внутренности ASP.net.

Кроме того, читайте http://ardalis.com/Codebehind-Files-in-ASP.NET-MVC-are-Evil и https://msmvps.com/blogs/luisabreu/archive/2008/09/19/codebehind-files-in-asp-net-mvc-are-not-evil.aspx

+0

Я читал это раньше. Мне кажется, что единственное отличие состоит в том, что M & V может взаимодействовать с Controller напрямую (в MVC), который, с другой стороны, в трехуровневой архитектуре, связь должна выполняться с помощью бизнес-логики. Похоже на два разных подхода, с тонкой ощутимой разницей. Есть ли преимущество выбора между MVC или 3 уровнями? – user1240679

+0

Я бы сказал, что 3 уровня и MVC - это очень разные понятия (поскольку шаблон MVC используется сейчас), 3 уровня больше связаны с тем, что ваш доступ к данным логически (и часто физически) отделен от вашей бизнес-логики, поэтому в современных условиях MVC становится первые два уровня вашего приложения, но у вас по-прежнему есть «уровень» доступа к данным, за которым стоит – Rich

+0

. Этот вопрос также касается MVC vs 3-уровневого http://stackoverflow.com/questions/1025430/i-need-some-clarification -on-the-mvc-architecture-and-the-three-tier-architectur – Rich

2

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

MVC это шаблон UI:
Просмотр: содержит HTML и JS только (в случае веб-проекта)
Контроллер: является своего рода посредником между UI (= вид) и фоновая (= модель)
модели: это где ваши объекты домена живут, а также бизнес и доступ к данным логика

3-х уровневая касается целом вас приложения:
UI: содержит HTML/JS, а также код позади страниц.
Существует абсолютно нет логики здесь, кроме кода пользовательского интерфейса и вызова бизнес-уровня.
Бизнес-уровень: здесь вы делаете такие вещи, как вычисления, условия, валидацию, ...
Так что фактическое поведение вашего приложения. Нет доступ к данным код здесь.
Доступ к данным: здесь, где вы разговариваете с базой данных и возвращаете данные на бизнес-уровень.
Ничего другого, бизнес-уровень должен знать, что с ним делать.

Так что, если вы объединить два, вы получите:
UI: мнения и контроллеры
Бизнес слой: часть модели
доступа данных: часть модели объекта
домена: вы» Я хочу поместить объекты, с которыми вы работаете (продукт, заказ, ..) в отдельный слой.
Это также часть модели.

Стреляйте, если у вас есть вопросы!

Смежные вопросы