Sự khác biệt giữa kiến ​​trúc 3 tầng và MVC (Model, View Controller) trong ASP.Net


9

Tôi rất muốn biết kiến ​​trúc 3 tầng khác với MVC (Model, View Controller) như thế nào trong ASP.Net vì có vẻ như tôi áp dụng kiến ​​trúc tương tự.

Trong 3 tầng chúng tôi có User Services Layer, BusinessLayerDataAccessLayer, mặt khác chúng ta có Model, ViewController. Điều này có vẻ giống kiến ​​trúc với tôi.

Bất cứ ai có thể giải thích nếu những gì thực sự khác nhau của hai kiến ​​trúc, mỗi lớp khác nhau như thế nào?



2
MVC có thể được xem nhiều hơn như một kiến ​​trúc UI. Các ví dụ khác là Angular chẳng hạn. Khi bạn triển khai kiến ​​trúc 3 tầng trong dự án MVC của ASP.net, nó sẽ chia mô hình (M) trong MVC thành 3 lớp.
devfric


@gnat tôi hiểu rồi, tôi chưa từng thấy cái cũ đó trước đây .. nhưng có vẻ như dups như bạn đã nói, điều duy nhất là câu trả lời trên cái cũ không được giải thích rõ, bạn nghĩ sao? :)
japzdivino

Câu trả lời:


18

Điều này giống như hỏi sự khác biệt giữa một quả táo và lõi táo. Hai kiến ​​trúc này không thay thế cho nhau. Tôi nghĩ rằng một cái nhìn chính xác hơn là kiến ​​trúc 3 tầng tăng cường MVC.

Kiến trúc MVC

  • Mô hình: Chúng đại diện cho "công cụ" trong ứng dụng của bạn. Lớp này đã trở nên hơi mờ trong những năm gần đây, như tôi sẽ giải thích sau.

  • Lượt xem: Giao diện người dùng. Điều người dùng tương tác với.

  • Bộ điều khiển: Mã lập trình đáp ứng người dùng và thay đổi trong lớp mô hình

Kiến trúc 3 tầng

Với kiến ​​trúc 3 tầng, bạn có các lớp với các trách nhiệm khác nhau.

  • Dịch vụ người dùng: (hoặc "dịch vụ" nói chung) Lớp này liên quan nhiều hơn đến việc phối hợp truy xuất và sửa đổi của lớp "mô hình". Các hành động phức tạp, gồm nhiều bước được thực hiện tại đây

  • Lớp nghiệp vụ: Điều này thể hiện các quy tắc kinh doanh được khắc vào mã lập trình. Những gì "Doanh nghiệp" muốn được thực thi trong lớp này.

  • Lớp truy cập dữ liệu: Một hoặc nhiều lớp chịu trách nhiệm truy cập kho lưu trữ dữ liệu liên tục.

Phần duy nhất của kiến ​​trúc 3 tầng giao với MVC là "Lớp nghiệp vụ". Các "Mô hình" trong MVC và "Lớp nghiệp vụ" trong kiến ​​trúc 3 tầng đang cố gắng đạt được cùng một mục tiêu.

Chữ "M" trong MVC đã bị mờ

Lớp "mô hình" trong MVC đã mở rộng trong những năm gần đây. Từ những gì tôi đã thấy, có hai, có thể ba loại mô hình:

  1. Mô hình miền: Chúng đại diện cho "những thứ" mà "Doanh nghiệp" quan tâm - Miền doanh nghiệp. Các lớp này chứa dữ liệu và tất cả các quy trình hoạt động trên dữ liệu đó để thực thi các quy tắc kinh doanh. Các mô hình miền thường xuyên được gắn với các bảng trong cơ sở dữ liệu. Điều này có vẻ phù hợp với "Lớp nghiệp vụ" của kiến ​​trúc 3 tầng.

  2. Mô hình xem: Đây là các lớp được sử dụng để xoa bóp dữ liệu từ các mô hình miền thành một cái gì đó hợp lý hơn với khung nhìn. Điều này không phù hợp với bất kỳ nơi nào trong kiến ​​trúc 3 tầng vì các mô hình xem không triển khai logic nghiệp vụ cũng như không cung cấp bất kỳ loại dịch vụ hoặc quyền truy cập dữ liệu nào.

  3. Mô hình kinh doanh: Trong các ứng dụng phức tạp, nhu cầu tách rời Mô hình miền khỏi Logic nghiệp vụ phát sinh. Mô hình nghiệp vụ chứa dữ liệu và quy trình hoạt động trên dữ liệu đó để thực hiện các quy tắc kinh doanh và Mô hình miền được chuyển thành "Túi tài sản" - các đối tượng chỉ giữ dữ liệu nhưng không chứa hành vi. Mô hình miền trở thành một dạng khác của Đối tượng truyền dữ liệu giữa cơ sở dữ liệu và ứng dụng.

Không nơi nào trong MVC là truy cập dữ liệu được đề cập. Trong một số trường hợp, bạn sẽ thấy quyền truy cập dữ liệu thuộc về lớp "mô hình" của MVC, như chúng ta đã thấy không phải là lớp cắt rõ ràng nữa. Thực sự tôi thấy kiến ​​trúc 3 tầng được ghép nối với MVC để tạo toàn bộ ứng dụng. Một sự gia tăng hoặc cải thiện cái khác:

  • Mô hình
    • Mô hình miền (MVC / 3-tier)
    • Xem mô hình (MVC)
    • (tùy chọn) Mô hình kinh doanh (MVC / 3 tầng)
  • Lượt xem (MVC)
  • Bộ điều khiển (MVC)
  • Truy cập dữ liệu (3 tầng)
  • Dịch vụ (3 tầng)

Có một số giao điểm, nhưng chúng phần lớn tách biệt, và cùng nhau được sử dụng để tách rời và cô lập các thành phần khác nhau của một hệ thống lớn hơn.


3

Không, họ không giống nhau.

MVC là một mẫu thiết kế để cấu trúc mã giao diện người dùng. Nó có thể được sử dụng trong kiến ​​trúc ba lớp, trong trường hợp đó mẫu sẽ thuộc về lớp dịch vụ người dùng. Nhưng nó cũng có thể được sử dụng cho UI trong một ứng dụng không phải là ba tầng - ví dụ: máy tính không có tính bền vững cơ bản và do đó không có lớp truy cập dữ liệu.

Trong kiến ​​trúc ba tầng với giao diện MVC, các đối tượng miền được sử dụng làm mô hình sẽ là các đối tượng từ lớp nghiệp vụ, nhưng mẫu MVC không thực sự chỉ định loại đối tượng nào của mô hình, chỉ có vai trò của chúng trong mẫu Là. Ví dụ, trong biến thể MVVM, các mô hình là các bộ điều hợp UI-specifc trên đầu các đối tượng miền. Trong trường hợp này, ngay cả mô hình thuộc về lớp dịch vụ người dùng.


Trước hết, MVC là một nhà phát triển mẫu kiến ​​trúc.mozilla.org/en-US/Apps/Fundamentals/ mẹo . Thứ hai, nó không chỉ dành cho UI, nó được sử dụng rộng rãi trong UI, nhưng tuyên bố rất xác định của bạn là không chính xác và sai lệch.
Daniel Dubovski

2

Tôi biết sẽ có vô số câu trả lời khác nhau, nhưng tôi sẽ cho bạn quan điểm của tôi về vấn đề này.

Đó là câu trả lời nổi tiếng nhất trong công nghệ phần mềm "Nó phụ thuộc".

Về cơ bản nếu bạn nhìn vào nó, bên cạnh những khác biệt về thực thi và lý thuyết, đây là những mô hình rất giống nhau với các luồng tương tự.

Trường hợp ứng dụng phụ thuộc vào là ứng dụng bạn đang xây dựng, một ứng dụng web đơn giản có thể chỉ có một lớp MVC nói chuyện thông qua ORM với DB. Một phức tạp hơn có thể có MVC xử lý giao diện người dùng trong Lớp người dùng, với các hoạt động tiếp xúc không phải người dùng phức tạp hơn xảy ra trong lớp BL, với lớp dữ liệu bao gồm nhiều nguồn.

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.