Kiến trúc MVC Vs n-tier


142

Tôi đã tự hỏi chính xác sự khác biệt giữa MVC (là một mẫu kiến ​​trúc) và kiến ​​trúc n tầng cho một ứng dụng. Tôi đã tìm kiếm nó nhưng không thể tìm thấy một lời giải thích đơn giản. Có thể tôi hơi ngây thơ về các khái niệm MVC, vì vậy nếu bất cứ ai có thể giải thích sự khác biệt thì nó sẽ rất tuyệt.

chúc mừng

Câu trả lời:


94

Kiến trúc N tầng thường có mỗi lớp được ngăn cách bởi mạng. IE lớp trình bày nằm trên một số máy chủ web, sau đó nói chuyện với các máy chủ ứng dụng phụ trợ qua mạng để logic kinh doanh, sau đó nói chuyện với máy chủ cơ sở dữ liệu, một lần nữa qua mạng và có thể máy chủ ứng dụng cũng gọi tới một số dịch vụ từ xa ( nói Authorize.net để xử lý thanh toán).

MVC là một mẫu thiết kế lập trình trong đó các phần mã khác nhau chịu trách nhiệm đại diện cho Model, View và bộ điều khiển trong một số ứng dụng. Hai điều này có liên quan bởi vì, ví dụ, lớp Model có thể có một triển khai bên trong gọi một cơ sở dữ liệu để lưu trữ và truy xuất dữ liệu. Bộ điều khiển có thể nằm trên máy chủ web và gọi ứng dụng từ xa để lấy dữ liệu. MVC tóm tắt các chi tiết về cách kiến ​​trúc của một ứng dụng được triển khai.

N-tier chỉ đề cập đến cấu trúc vật lý của việc thực hiện. Hai cái này đôi khi bị lẫn lộn vì một thiết kế MVC thường được triển khai bằng kiến ​​trúc N-tier.


56
N-tier cũng là một mẫu thiết kế, bạn không cần 3 máy chủ để thực hiện một hệ thống 3 tầng, trên thực tế, có thể thực hiện một hệ thống n tầng bằng một tệp duy nhất, phân tách mỗi tầng bằng một khái niệm khái niệm.
magallanes

6
Cấp về cơ bản ngụ ý rằng một giao tiếp giữa các quá trình đang xảy ra Thông thường trên một liên kết mạng. Tôi không đồng ý rằng một luồng thiết kế mã trong quá trình (huống chi trong cùng một tệp) tạo thành một cách tiếp cận thiết kế theo tầng. Tất nhiên đó là IMHO. "Máy chủ" ngụ ý rằng máy có thể chạy một số quy trình trên cùng một hộp; và họ thậm chí có thể vẫn nói chuyện trên mạng "localhost".
Zak

2
Tất cả các định dạng được thảo luận là ví dụ về thiết kế 3 lớp. Đừng nhầm lẫn giữa sự khác biệt giữa một lớp và một lớp. Đúng là bạn có thể chạy nhiều hơn một tầng trên một mahcine vật lý (ví dụ: bạn chia một máy chủ lớn thông qua các trình ảo hóa), nhưng vấn đề ở đây là N-Tier đối với một mạng hop vật lý (ví dụ TCP / IP). Tại địa phương, bạn sẽ hiệu quả hơn khi sử dụng các đường ống có tên, nhưng một lần nữa, nếu bạn chạy trên cùng một hệ thống, bạn sẽ cạnh tranh về bộ nhớ và khả năng xử lý. Tất cả những điều này là lý do để xem xét cách ly trình bày, Logic nghiệp vụ & truy cập dữ liệu và cơ sở dữ liệu trên các máy khác nhau.
Zack Jannsen

1
Tôi muốn giới thiệu bất cứ ai đọc câu hỏi này để đọc các câu trả lời khác, câu trả lời này không chính xác
keisar

@magallanes, Đi với 'Zak', trước tiên chúng ta cần xóa sự khác biệt giữa Lớp và Lớp Đây là bài viết về bảng mã rất tốt trong đó có lời giải thích rõ ràng
Irf

42

Nếu một thiết kế 3 tầng như thế này:

Client <-> Middle <-> Data

Patter MVC sẽ là:

     Middle
     ^    |
     |    v
Client <- Data

Điều đó có nghĩa là:

  • trong tương đương 3 tầng, giao tiếp giữa các lớp là hai chiềuluôn đi qua tầng giữa
  • trong MVC tương đương, giao tiếp là đơn hướng ; chúng ta có thể nói rằng mỗi "lớp" được cập nhật bởi một lớp ở bên trái và lần lượt, cập nhật lớp ở bên phải "trái" và "phải" chỉ mang tính minh họa

Máy khách PS sẽ là Chế độ xemGiữa bộ điều khiển


13
trong MVC mô hình có thể tương tác trực tiếp với máy khách (view) ??? Tôi không nghĩ vậy!
palAlaa

6
@Alaa, tôi đồng ý và đó là lý do tại sao tôi nghĩ rằng nó đề cập đến luồng dữ liệu. Cập nhật: Tôi vừa kiểm tra trên Wikipedia và Mô hình có thể tương tác Chế độ xem thông qua người quan sát (không trực tiếp).
khoảng trống

1
Trong MVC: Kiến trúc MVC là hình tam giác: khung nhìn gửi các bản cập nhật cho bộ điều khiển, bộ điều khiển cập nhật mô hình và khung nhìn được cập nhật trực tiếp từ mô hình Trong Ba tầng: Kiến trúc ba tầng là tầng khách không bao giờ giao tiếp trực tiếp với tầng dữ liệu Trong mô hình ba tầng, tất cả thông tin liên lạc phải đi qua tầng giữa
ketan italiya

1
Ở đây, nếu Middle là bộ điều khiển thì giao tiếp giữa Middle, Client và Middle, Data là hai chiều không phải là một hướng như mô tả trong ans. Bộ điều khiển chuyển dữ liệu cho mô hình và mô hình trả lại dữ liệu đã cập nhật cho bộ điều khiển, sau đó trả lại cho trình duyệt sau khi đi qua xem.
Rồng

30

Đây là những gì nói về kiến trúc n-tier

Thoạt nhìn, ba tầng có vẻ giống với khái niệm MVC (Model View Controller); tuy nhiên, về mặt tôpô thì khác. Một quy tắc cơ bản trong kiến ​​trúc ba lớp là tầng khách không bao giờ giao tiếp trực tiếp với tầng dữ liệu; trong một mô hình ba tầng, tất cả các giao tiếp phải đi qua tầng trung gian. Về mặt khái niệm kiến ​​trúc ba tầng là tuyến tính. Tuy nhiên, kiến ​​trúc MVC có dạng hình tam giác: Chế độ xem gửi các bản cập nhật cho Bộ điều khiển, Bộ điều khiển cập nhật Mô hình và Chế độ xem được cập nhật trực tiếp từ Mô hình.


11
Nghe có vẻ hay, nhưng tôi không tin rằng "Chế độ xem được cập nhật trực tiếp từ Mô hình" là một ý tưởng hay. Không có nghĩa gì khi sử dụng Bộ điều khiển để cập nhật và chèn nhưng không phải cho các lựa chọn và bộ lọc và tôi không thấy điểm phân tách mối quan tâm chỉ để ràng buộc chế độ xem với mô hình! Kết luận - MVC là một trong những obfuscations được tạo bởi .... có một dự đoán. Tôi không nhớ 3 tầng bị giới hạn ở "kiến trúc hệ thống" hay "thiết kế ứng dụng". Khái niệm trung tâm là tách các mối quan tâm .
Sam

1
Nó sẽ phụ thuộc vào những gì bạn đang làm. Ứng dụng MVC cho ứng dụng iOS (có thể sẽ không cho phép chế độ xem được cập nhật trực tiếp từ Mô hình) sẽ khác với ứng dụng Web (có thể). MVC là một mô hình, không phải là một cách tuyệt đối để làm việc.
Dave Kanter

2
@Sam hoàn toàn đồng ý. Quá nhiều biệt ngữ cho một khái niệm trực quan.
smwikipedia

1
Nghe có vẻ tốt, không hoạt động. Wikipedia không phải là nguồn gốc của sự thật
ACV

Đó là cách bạn diễn giải sự thật, và một lần nữa, nó phụ thuộc vào mục tiêu của bạn là gì
Xinus 16/1/18

17

Điểm giống nhau duy nhất là hai mẫu có ba hộp trong sơ đồ của chúng. Về cơ bản chúng hoàn toàn khác nhau trong cách sử dụng. Nếu thực tế, nó thường không phải là sự lựa chọn giữa việc sử dụng mẫu nào, nhưng cả hai mẫu có thể được sử dụng cùng nhau một cách hài hòa. Dưới đây là một so sánh tốt của hai: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-potype.html


3
Tôi nghĩ rằng đây là câu trả lời tốt nhất, đặc biệt là khi MVC thực sự tập trung vào UI và nó có thể là tầng UI của bạn trong thiết kế 3 tầng. Các sơ đồ trong liên kết thể hiện điều này rất tốt.
Alex

5

Một quy tắc cơ bản trong kiến ​​trúc ba lớp là tầng khách không bao giờ giao tiếp trực tiếp với tầng dữ liệu; trong một mô hình ba tầng, tất cả các giao tiếp phải đi qua tầng trung gian.

Đó là kiến ​​trúc lót. Điều này giải quyết câu hỏi làm thế nào để truyền thông tin giữa người dùng và cơ sở dữ liệu. Trong đó MVC là kiến ​​trúc hình tam giác: Chế độ xem gửi các bản cập nhật cho Bộ điều khiển, Bộ điều khiển cập nhật Mô hình và Chế độ xem được cập nhật trực tiếp từ Mô hình. Điều này giải quyết các câu hỏi về cách giao diện người dùng quản lý các thành phần trên màn hình.


5

@Cherry Middle ware hoạt động giống như một trình xử lý yêu cầu hoặc chuyển hướng trong Mô hình MVC.

Tôi muốn giải thích một chút về MVC, theo tôi Model View Controller hoạt động như thế này.

  1. Khách hàng bắt đầu phiên bằng cách yêu cầu bất kỳ dịch vụ.
  2. Yêu cầu này được nhận và xử lý bởi Trình điều khiển (Trình xử lý yêu cầu, chuyển hướng, v.v.)
  3. Bộ điều khiển xử lý thông tin cơ bản theo yêu cầu và chuyển hướng nó đến Mô hình có liên quan có thể lấp đầy yêu cầu dữ liệu.
  4. Mô hình điền vào yêu cầu theo các tham số được đưa ra bởi Bộ điều khiển và gửi lại kết quả cho Bộ điều khiển. (Lưu ý: Ở đây tôi muốn xóa dữ liệu không được trả lại trực tiếp cho máy khách trong kiến ​​trúc MVC thực, thay vào đó nó sẽ lấp đầy và trả về bộ điều khiển.)
  5. Kiểm soát hơn gửi dữ liệu đó đến View (Client).
  6. Khách hàng có dịch vụ yêu cầu trước mặt anh ta.

Đó là tất cả về MVC mà tôi biết.


1
Tôi nghĩ rằng, như đã nói ở trên, MVC là hình tam giác, do đó, View đôi khi có thể nói chuyện trực tiếp với Model và ngược lại, như được giải thích trong tài liệu này: msdn.microsoft.com/en-us/l
Library / ms978748.aspx

5

Nghỉ ngơi. Và đừng giới hạn bản thân trong một số mô hình nhất định khi giải quyết các vấn đề trong thế giới thực. Chỉ cần nhớ một số nguyên tắc chung, một trong số đó là XÁC NHẬN Ý TƯỞNG .


4

Bên cạnh tính tuyến tính, một sự khác biệt lớn khác chưa được nhấn mạnh đủ ở đây là trong mô hình N-tier, N không nhất thiết phải là 3 tầng! Nó thường được triển khai dưới dạng ba tầng (trình bày, ứng dụng, dữ liệu) với lớp giữa có hai tầng con (logic nghiệp vụ và truy cập dữ liệu). Ngoài ra, mô hình trong MVC có thể chứa cả dữ liệu và logic nghiệp vụ để thao tác dữ liệu, trong khi đó các mô hình này sẽ ở các tầng riêng biệt trong n-tier.


3

Kiến trúc N-Tier được xác định tốt nhất bằng Sơ đồ triển khai.

Một kiến ​​trúc MVC được xác định tốt nhất bằng cách sử dụng Biểu đồ tuần tự.

Cả 2 không giống nhau và không liên quan và bạn có thể kết hợp hai kiến ​​trúc lại với nhau. Rất nhiều công ty đã thực hiện các bước để tạo kiến ​​trúc N Tier'd không chỉ cho việc triển khai và khả năng mở rộng mà còn cho việc tái sử dụng mã.

Ví dụ: các đối tượng Thực thể kinh doanh của bạn có thể cần được sử dụng bởi ứng dụng máy tính để bàn, dịch vụ web được hiển thị cho khách hàng, ứng dụng web hoặc ứng dụng di động. Đơn giản chỉ cần sử dụng một cách tiếp cận MVC sẽ không giúp bạn sử dụng lại bất cứ thứ gì cả.


Nếu mvc không sử dụng lại bất cứ điều gì cho kịch bản đã cho của bạn thì có bất kỳ lợi ích nào của mvc so với n tier arch.
Rồng

2

Kết luận: N-tier là một kiến ​​trúc, MVC là một mẫu thiết kế. Chúng là cùng một siêu hình được áp dụng trong hai lĩnh vực khác nhau.


1

Jerry: Đây là một ví dụ đơn giản về cách hai người có liên quan với nhau:


Cấp 1 - Bao gồm các Mô hình giao tiếp với Cấp 2 thông qua một số loại dịch vụ mạng hoặc tương tự, bộ điều khiển để xử lý xác thực đầu vào, tính toán và những thứ khác có liên quan cho các chế độ xem. Và bản thân nó chứa các khung nhìn, dĩ nhiên - có thể là GUI trong ứng dụng máy tính để bàn hoặc giao diện web trong ứng dụng web.


Cấp 2 - Chứa một số loại dịch vụ hoặc cách nhận tin nhắn khác từ Cấp 1. Không / không nên biết về Cấp 1, vì vậy chỉ có thể trả lời các cuộc gọi từ phía trên - không bao giờ tự mình yêu cầu mọi thứ. Cũng chứa tất cả logic kinh doanh.


Bậc 3 - Chứa mô hình miền, biểu diễn đối tượng của cơ sở dữ liệu và tất cả logic để giao tiếp và cập nhật các mục nhập cơ sở dữ liệu.


1

Trong mô hình ba tầng, tất cả các giao tiếp phải đi qua tầng giữa. Về mặt khái niệm kiến ​​trúc ba tầng là tuyến tính. Tuy nhiên, kiến ​​trúc MVC [model-view-controller] có dạng hình tam giác: khung nhìn gửi các bản cập nhật cho bộ điều khiển, bộ điều khiển cập nhật mô hình và khung nhìn được cập nhật trực tiếp từ mô hình.


Trên thực tế, nó không phải là MVC, đó là MVVMC. Tôi thấy rằng MVC hoặc MVVMC chỉ là một lớp trình bày bởi vì tôi thấy bộ điều khiển chỉ là một phần mềm trung gian giữa các khung nhìn và BLL. Đây là cách tôi sẽ duy trì nó để tôi có thể sử dụng BLL làm thư viện để tạo UI cho các nền tảng khác nhau. Đó là loại aspx.cs có hỗ trợ asmx. Đôi khi tôi cảm thấy MVC là một cách tồi để tổ chức các tệp trong thư mục dự án, hơi khó hiểu vì tất cả các bộ điều khiển sẽ ở một cấp độ và các khung nhìn trong các thư mục con. Tôi cũng có thể tạo các thư mục con cho bộ điều khiển nhưng công việc trùng lặp của nó.
Nithin B
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.