2012-03-17 33 views
5

Tôi đã cố gắng tìm sự khác biệt giữa kiến ​​trúc MVC và 3 tầng trong ASP.NET. Tôi đã đề cập đến một số câu hỏi trước đây và một số trang trước đó, nhưng có thể tìm thấy câu trả lời rõ ràng.
Đây là aa trang MSDN về thực hiện MVC: http://msdn.microsoft.com/en-us/library/ff647462.aspxSự khác biệt giữa bộ điều khiển MVC và logic nghiệp vụ (3 tầng)

xem xét, tôi ahve mã này:
Độc trang aspx UI và mã cũng

<%@ 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> 

Bây giờ, hãy xem xét tôi có các file khác nhau cho
---- Xem và mã-đằng sau 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. Thấy trên msdn page link cho lớp Controller, tôi không thể phân biệt sự khác nhau giữa logic kinh doanh (mà có thể đã được tương tự cho một tầng giữa trong kiến ​​trúc 3 tầng) và bộ điều khiển.
  2. Điều 3 và MVC hoàn toàn khác nhau? Có phải ứng dụng ASP.NET trong Visual Studio đã tách tệp như ở dạng MVC không? Nếu đây không phải là khác nhau, cái nào là phong cách ưa thích?
  3. Khuôn khổ MVC về sau đó nếu .aspx và .aspx.cs đã được spearated?

Trả lời

5

Tôi thực sự strugled với một này trong khi myslef, có triết lý khác nhau về cách thực hiện nó một cách chính xác, vì vậy đây là cách tôi hiểu nó theo cách của tôi thế nào tôi hiểu được mối quan hệ giữa những điều khác nhau liên quan (mô hình/Views/Controller/Business logic):

  • Lần
    Có tất cả các mã Html/jQuery, họ sử dụng các dữ liệu trong hình thức Model trường hợp đến từ bộ điều khiển
  • Models
    Các lớp giữ các thông tin Xem của bạn cần phải render (Danh sách sản phẩm vv)
  • Controller
    • Họ đưa yêu cầu đến
    • Hãy công tác chuẩn bị cần thiết (khai thác tham số, vv) để gọi mã logic kinh doanh thực tế của bạn.
    • Sau đó, các cuộc gọi vào mã logic kinh doanh và lấy kết quả
    • Sau đó họ lấy kết quả và biến nó thành một mô hình mà giao diện người dùng hiểu
  • Kinh doanh logic
    Đây là mã logic kinh doanh thực tế của bạn , gọi db, vv. Tôi mắt của tôi này là hoàn toàn tách biệt với toàn bộ điều MVC, trên thực tế nó thậm chí không nên biết nó được thực hiện từ một ứng dụng web MVC. Thông thường chúng ta đặt điều này trong một assembly khác (thư viện lớp) để đảm bảo không có sự phụ thuộc vào mã MVC.
    Điều này làm cho nó rất đơn giản để kiểm tra đơn vị chỉ là logic kinh doanh, vì không có phụ thuộc vào MVC.

Tôi đã thấy các cách tiếp cận khác nơi logic nghiệp vụ thực sự được đưa vào bộ điều khiển, nhưng trong mắt tôi đánh bại mục đích. Chúng tôi không xây dựng các ứng dụng MVC để có cấu trúc đẹp, mà còn để có thể thực hiện kiểm tra đơn vị tốt hơn.

Quay lại câu hỏi của bạn, tất cả liên quan đến kiến ​​trúc ASP.NET 3 tầng như thế nào.
Người ta có thể nói rằng về cơ bản toàn bộ ứng dụng web MVC là không có gì nhiều hơn các lớp trình bày (+ dây lên lớp trình bày với lớp Busines).

Các lớp khác ở riêng biệt và độc lập với lớp trình bày, như chúng cần phải có trước đây.

+0

Điều này hoàn toàn đúng. Tôi cũng nói rằng các khung nhìn chứa logic trình bày trong khi các Bộ điều khiển chứa logic ứng dụng trong tầng trình bày. Hơn nữa, Mô hình thường là một phần của lớp kinh doanh. –

+0

@BalazsTihanyi Trên thực tế chúng tôi đi xa như không làm cho các lớp kinh doanh nhận thức được các mô hình được sử dụng bởi các quan điểm, lớp kinh doanh đang sử dụng một bộ khác nhau của 'mô hình' và kết quả được ánh xạ tới các mô hình trong bộ điều khiển (automapper i ' m nhìn bạn) – ntziolis

0

Xem here để so sánh tốt giữa "lớp" và "tầng" trong kiến ​​trúc phần mềm/thiết kế

Các mô hình MVC là tất cả về tách mối quan tâm, và thực tế là lớp trình bày của bạn (quan điểm) và logic nghiệp vụ nên được tách ra. Sử dụng mã phía sau làm cho nó dễ dàng để bùn nước. Bạn sẽ thấy rằng công cụ xem ASP.NET mới (Razor) thậm chí không có mã đằng sau các tệp.

Sự khác biệt chính, sẽ bắt đầu quan trọng hơn khi bạn muốn kiểm tra logic trong bộ điều khiển của mình một cách tự động, đó là bộ điều khiển chỉ là một lớp cũ, nhưng codebehind của bạn được thừa kế từ System.Web.UI.Page và do đó được gắn chặt với nội dung của ASP.net.

Ngoài ra, đọc http://ardalis.com/Codebehind-Files-in-ASP.NET-MVC-are-Evilhttps://msmvps.com/blogs/luisabreu/archive/2008/09/19/codebehind-files-in-asp-net-mvc-are-not-evil.aspx

+0

Tôi đã đọc nội dung này trước đó. Dường như với tôi rằng sự khác biệt duy nhất là M & V có thể tương tác trực tiếp với Controller (trong MVC), mặt khác trong kiến ​​trúc 3 tầng, việc truyền thông phải được thực hiện thông qua logic nghiệp vụ. Có vẻ như hai cách tiếp cận khác nhau, với một sự khác biệt đáng chú ý. Có một lợi thế của việc lựa chọn giữa MVC hoặc 3 tầng? – user1240679

+0

Tôi sẽ nói rằng 3 tầng và MVC là các khái niệm rất khác nhau (như mô hình MVC được sử dụng bây giờ), 3 tầng đề cập nhiều hơn đến việc truy cập dữ liệu của bạn một cách hợp lý (và thường là vật lý) được tách ra khỏi logic nghiệp vụ của bạn. hai tầng đầu tiên của ứng dụng của bạn, nhưng bạn vẫn có quyền truy cập dữ liệu "tầng" được đặt sau số – Rich

+0

Câu hỏi này cũng đề cập đến MVC và 3 tầng http://stackoverflow.com/questions/1025430/i-need-some-clarification -on-the-mvc-kiến trúc-và-the-ba-tier-architectur – Rich

2

MVC và 3 tầng là hoàn toàn khác nhau điều.
Tôi thấy rất nhiều người nhầm lẫn cả hai vì cả hai đều có 3 phần.

MVC là một mô hình UI:
Xem: chỉ chứa html và js (trong trường hợp của một dự án web)
khiển: là một loại của một trung gian giữa giao diện người dùng (= quan điểm) và back-end (= mô hình)
mẫu: đây là nơi các đối tượng tên miền của bạn sống, cũng như logic kinh doanh và dữ liệu truy cập

3 tầng liên quan đến toàn của bạn ứng dụng:
UI: chứa html/js cũng như mã đằng sau của các trang.
Có hoàn toàn không có logic ở đây, ngoài mã giao diện người dùng và gọi lớp doanh nghiệp.
Lớp doanh nghiệp: đây là nơi bạn đặt những thứ như tính toán, điều kiện, xác thực, ..
Vì vậy, hành vi thực tế của ứng dụng của bạn. Không có truy cập dữ liệu mã tại đây.
Truy cập dữ liệu: tại đây bạn nói chuyện với cơ sở dữ liệu và trả lại dữ liệu cho lớp doanh nghiệp.
Không có gì khác, lớp doanh nghiệp nên biết phải làm gì với nó.

Vì vậy, nếu bạn kết hợp hai, bạn sẽ nhận được:
UI: quan điểm và điều khiển
Business lớp: một phần của mô hình
truy cập dữ liệu: một phần của mô hình đối tượng
miền: bạn' sẽ muốn đặt các đối tượng bạn đang làm việc với (sản phẩm, trật tự, ..) trong một lớp riêng biệt.
Đây cũng là một phần của mô hình.

Chụp nếu bạn có câu hỏi!

Các vấn đề liên quan