MVC là Mẫu thiết kế hay Mẫu kiến ​​trúc


109

Theo SunMsdn, đó là một mẫu thiết kế.

Theo Wikipedia nó là một mẫu kiến ​​trúc

So với các mẫu thiết kế, các mẫu kiến ​​trúc có quy mô lớn hơn. (Wikipedia - Mẫu kiến ​​trúc )

Hay là mẫu kiến ​​trúc cũng có mẫu thiết kế?

Cái nào là đúng ?


1
Vì phải có một câu trả lời đúng ...
Mike G

theo Dave tại Product Madness, MVC là một mẫu thiết kế, và RobotLegs cũng vậy. : P
andygoestohollywood

Câu trả lời:


56

MVC là một mô hình kiến ​​trúc, nhưng không phải là ứng dụng hoàn chỉnh. MVC chủ yếu liên quan đến giao diện người dùng / lớp tương tác của một ứng dụng. Bạn vẫn cần lớp logic nghiệp vụ, có thể là một số lớp dịch vụ và lớp truy cập dữ liệu. Đó là, nếu bạn theo cách tiếp cận n-tier.


16
Vâng, tôi có thể nói MVC là một mô hình kiến ​​trúc cho cấp Trình bày của bạn.
murki

8
Tôi hoàn toàn không đồng ý về việc "MVC chủ yếu liên quan đến giao diện người dùng / lớp tương tác của ứng dụng". Mô hình "M" / trong MVC lớp nghiệp vụ, mà bạn có thể muốn chia thành nhiều lớp.
mewm

Có câu trả lời này là sai. MVC hoàn toàn không phải về Giao diện người dùng / Tương tác. Bạn hoàn toàn có thể có mvc ở mặt trước và mặt sau, ở chế độ xem ban đầu thường chỉ là html / js hoặc .jsp hoặc .phtml và máy chủ xác định bộ điều khiển và mô hình. Exemple JSP (view), JavaBeans (Model), Servlet (controller). Cùng một khái niệm với tất cả các khuôn khổ php nổi tiếng (giao hưởng, zend, bánh, v.v.). Nhưng ngày nay, các khung công tác giao diện người dùng trông giống như ứng dụng kết thúc và các khung công tác javascript hiện đại sử dụng mvc (html chế độ xem của bạn, điều khiển tập lệnh của bạn và lập mô hình các đối tượng js của bạn dưới dạng thực thể)
amdev

40

Tại sao một trong số chúng phải đúng?

Cả hai đều có thể đúng, tùy thuộc vào quan điểm.

MVC có thể là một mẫu kiến ​​trúc, nếu nó tạo thành nền tảng của kiến ​​trúc ứng dụng.

Nó cũng có thể được xem đơn giản là một mẫu thiết kế, một khái niệm trừu tượng có thể áp dụng cho bất kỳ ứng dụng nào.


27

Các mẫu thiết kế cho biết cách viết mã hiệu quả (xem xét Số liệu mã ).

Một số lợi ích:

  1. Dễ dàng bảo trì
  2. Khả năng tái sử dụng cao
  3. Có thể đọc được vì sự trừu tượng

Các mẫu kiến ​​trúc nói lên cách sử dụng tài nguyên một cách hiệu quả.

  1. Việc thực thi các tác vụ song song như lập trình viên và thiết kế đồ họa có thể hoạt động song song.
  2. Nhiều công nghệ có thể được sử dụng để xây dựng một phần mềm.

Trong MVC, a). Các khung nhìn có thể được tạo bằng cách sử dụng các mẫu javascript và cũng có thể sử dụng html b). Bộ điều khiển có thể được viết .NET framework và c). Mô hình có thể được viết bằng Java - một dịch vụ java có thể được sử dụng để chỉ trả về dữ liệu json.

Trong khi ở dạng thiết kế, không thể triển khai một mẫu mà mã có thể được viết bằng nhiều công nghệ như lớp AdminUser trong Java, lớp Khách hàng trong C #, lớp Đối tác trong Php và một mẫu nhà máy trong Ruby :); hmmm..nó dễ không? :)


6

Tôi biết rằng nó đã được trả lời cách đây một thời gian, nhưng vẫn chưa ai đề cập đến cuốn sách đã làm cho MVC trở nên nổi tiếng: Kiến trúc phần mềm hướng khuôn mẫu (POSA), của Buschmann và cộng sự xuất bản năm 1996. Mặc dù không được đọc nhiều như cuốn sách Mẫu thiết kế , của Gamma và cộng sự, POSA là một trong những cuốn sách nền tảng được cộng đồng mẫu sử dụng.

Ồ, và POSA xác định rất rõ ràng MVC như một mẫu kiến ​​trúc. Linh cảm của tôi là MS và Sun đang cẩu thả và gọi mọi mẫu là "mẫu thiết kế".


3

Tôi nghĩ cả hai đều đúng. Nếu bạn đang xem một bản khởi tạo cụ thể của MVC trong một khuôn khổ như Ruby on Rails, thì bản khởi tạo đó giống với một mẫu thiết kế hơn. Nếu bạn xem MVC như một khái niệm chung , nó giống một mô hình kiến ​​trúc hơn.


3

Các mẫu thiết kế bên trong bộ ba lớp Model / View / Controller (MVC) bao gồm và có thể không giới hạn ở:

  • Người quan sát , việc tách các đối tượng để thay đổi thành một (mô hình) có thể ảnh hưởng đến bất kỳ số lượng nào khác (các khung nhìn) mà không yêu cầu đối tượng đã thay đổi (mô hình) biết chi tiết của các đối tượng khác (các khung nhìn).

  • Composite , cho phép chúng ta xử lý một đối tượng nhóm (một dạng xem tổng hợp) giống như chúng ta xử lý một trong các đối tượng riêng lẻ của nó (các thành phần dạng xem).

  • Chiến lược , trong đó một chế độ xem sử dụng một phiên bản của lớp con Bộ điều khiển để thực hiện một chiến lược phản hồi cụ thể; để thực hiện một chiến lược khác, chỉ cần thay thế phiên bản bằng một loại bộ điều khiển khác.

  • Phương thức Nhà máy , chỉ định lớp bộ điều khiển mặc định cho một dạng xem.

  • Trình trang trí , thêm thao tác cuộn vào chế độ xem.


Tài liệu tham khảo

  • Trang 4 đến 6 (Phần 1.2 Các mẫu thiết kế trong Smalltalk MVC)
  • Trang 293 đến 304 (Mẫu thiết kế trình quan sát)
  • Trang 163 đến 174 (Mẫu thiết kế tổng hợp)
  • Trang 315 đến 324 (Mẫu thiết kế chiến lược)
  • Trang 107 đến trang 116 (Mẫu thiết kế theo Phương pháp Nhà máy)
  • Trang 175 đến 185 (Mẫu thiết kế trang trí)

Eric Gamma, Richard Helm, Ralph Johnson và John Vlissides. Mẫu thiết kế: Các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng . Addison-Wesley, Reading, MA, 1994.


1
Cảm ơn, tất cả các câu trả lời khác đều sai. Nó hoàn toàn không phải là "tùy thuộc vào một quan điểm" và có hàng chục hoặc hàng trăm phiếu bầu sẽ không làm cho điều gì sai sự thật. Bản thân MVC không phải là một mẫu thiết kế, đó là một cách để kiến ​​trúc mã của bạn thành 3 lớp bằng cách sử dụng mẫu thiết kế nhiều lớp mà bạn đề cập. Tất cả khuôn khổ triển khai MVC đằng sau cảnh đều sử dụng khái niệm Có thể quan sát, Chiến lược và mẫu tổng hợp. Cách tốt nhất để hiểu MVC là tạo ra triển khai của riêng bạn và sau đó bạn sẽ hiểu các mẫu thiết kế đằng sau.
amdev

2

MVC luôn được đề cập và giới thiệu dưới dạng / trong lớp trình bày trong sách kiến ​​trúc phần mềm.

Đọc những cuốn sách này:

  1. Lưu trữ Giải pháp Microsoft.NET cho Doanh nghiệp (Microsoft báo chí)

  2. Mẫu thiết kế ASP.NET chuyên nghiệp (Wrox)

  3. Các mẫu giải pháp giải trí bằng Microsoft.NET (Microsoft nhấn)

  4. Các mẫu kiến ​​trúc ứng dụng doanh nghiệp (Addison Wesley)

  5. Hướng dẫn Thực hành về Kiến trúc Doanh nghiệp (Prentice Hall)


6
tại sao lại có 2 câu trả lời? bạn có thể thêm câu trả lời này như một ghi chú bổ sung cho câu đầu tiên của bạn
ếchatto

2

Nếu bạn đặt mười kiến ​​trúc sư phần mềm vào một phòng và để họ thảo luận về mô hình Model-View-Controller là gì, bạn sẽ có mười hai ý kiến ​​khác nhau. … Một số người theo chủ nghĩa thuần túy ngoài kia chắc chắn sẽ phải e ngại với thứ mà tôi gọi là “MVC”. Hãy để lại một bình luận rực rỡ trên bảng tin ở cuối trang Web này. Tôi sẵn lòng giải thích các quan điểm khác nhau về ý nghĩa của MVC, nhưng hãy nhớ rằng tôi không quan tâm.

Josh Smith


1

Và theo Martin Fowler, chúng là kiến ​​trúc GUI: Martin Fowler-GUI architecture

Nó phụ thuộc vào kích thước của ứng dụng, vì nó chỉ ảnh hưởng đến các lớp liên quan đến GUI, trong một lớp nhỏ (chủ yếu là GUI), nó có thể được coi là một mẫu kiến ​​trúc trong khi ở một lớp lớn, nó sẽ chỉ là một mẫu thiết kế mà bạn áp dụng cho GUI mã (có thể là 10% mã ứng dụng).


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.