Liệu MVC chỉ áp dụng cho web


14

Gần như ngay lập tức và bất cứ khi nào tôi nói chuyện với các nhà phát triển về Model View Controller ( MVC ), họ nói rằng bạn yêu cầu một url mà máy chủ xây dựng một thực thể (MODEL) và cung cấp cho bạn biểu diễn trực quan của mô hình đó.

  • Vậy điều này có nghĩa là MVC chỉ dành cho web hay tôi đã gặp những người chỉ là nhà phát triển sử dụng MVC để viết ứng dụng web?

  • Có tập quán nào cho MVC trên các ứng dụng kiểu máy tính để bàn không?

  • Tôi cho một người mới biết về mô hình và muốn biết về bất kỳ siêu thiết lập nào cho MVC


1
bạn đã kiểm tra các wiki lập trình.SE hoặc Stack Overflow cho 'mvc' chưa?
gnat

3
@gnat vâng tôi đã làm
Deeptechtons

6
Vậy thì có lẽ bạn đã biết câu trả lời cho câu hỏi của mình phải không?
gnat

4
@gnat nghiêm túc KHÔNG, tôi hoàn toàn mới đối với MVC (như đã nêu) và chưa bao giờ sử dụng hoặc nghe (một số tai tôi nhận được) về việc áp dụng MVC cho các ứng dụng windows hoặc sử dụng một ứng dụng có huy hiệu MVC trên trang tải xuống. Xin lỗi nếu câu hỏi thật ngu ngốc nhưng đối với tôi nó thật khó hiểu
Deeptechtons 21/03

Có rất nhiều tài nguyên tốt để tìm hiểu lịch sử của MVC nhưng tôi thấy quan niệm sai lầm này rất nhiều, vì vậy tôi đã viết một bản tóm tắt hay trên blog của mình.kutulu.org/2012/01/mvc-mvp-mvvm-mvpvm-lmnop-wtf .html
KutuluMike

Câu trả lời:


22

MVC là một mô hình. Các mẫu áp dụng trên tất cả các chương trình. MVC chỉ xảy ra để làm việc rất tốt trong một bối cảnh web.

Như gnat chỉ ra chỉ cần nhìn vào thẻ mvc và bạn sẽ thấy nhiều ví dụ về nó đang được thực hiện.


5
Đây là chìa khóa. MVC hoạt động thực sự tốt trong các ứng dụng web và thực sự là một phần lớn lý do tại sao các khung dựa trên MVC hiện đại (như Rails, Django và ASP.NET MVC) rất phổ biến. Nó cũng hoạt động trong các bối cảnh khác (như ứng dụng trên máy tính để bàn), nhưng khó giữ sạch màn hình và bộ điều khiển hơn, do đó, các biến thể loại bỏ phân tách trình điều khiển chế độ xem như Trình ủy nhiệm mô hình (được sử dụng bởi Swing) hoặc thay đổi khi xảy ra sự phân tách như Model-View-ViewModel (được sử dụng chủ yếu bởi các ứng dụng .Net WPF) phổ biến hơn trong Ứng dụng máy tính để bàn.
Kevin Cathcart

Nếu bạn xem mô tả ban đầu của Smalltalk về những gì bộ điều khiển thực hiện - dịch đầu vào của người dùng thành các thông điệp cho mô hình - bản thân Windows về cơ bản là một bộ điều khiển lớn; đó là lý do tại sao MVC là một mẫu không phù hợp lắm với các ứng dụng UI của Windows. Nó được sử dụng nhiều hơn trong các UI UI cho các hệ thống không phải Windows.
KutuluMike

@MichaelEdenfield Không thực sự; bạn có thể làm MVC và WinForms cùng nhau, mặc dù MVP phổ biến hơn ở đó, nhưng MVP dù sao cũng là một biến thể của MVC.
Andy

45

Xem xét rằng MVC có từ năm 1977 và web chỉ được phát minh vào năm 1991, nên rõ ràng là MVC không chỉ dành cho web.


30
Đây là một khởi đầu tốt đẹp của câu trả lời, nhưng có vị đắng trong miệng.
Nicolas C.

2
Đúng lén lút. Công cụ tuyệt vời!
Tom Hawtin - tackline

1
"Năm 1982, Bộ giao thức Internet (TCP / IP) đã được chuẩn hóa và khái niệm về một mạng lưới TCP / IP được kết nối hoàn chỉnh trên toàn thế giới được gọi là Internet đã được giới thiệu." wiki . Nếu bạn có nghĩa là Netscape, thì ok ... nhưng "web" đã tồn tại trước đó.
jmq

4
@jmquigley "Internet" và "Web" là hai thứ rất khác nhau.
Eric King

1
@jmq 1977 mặc dù vẫn VẪN trước năm 1982 và như một người khác đã chỉ ra Web! = Internet. Web thực sự KHÔNG tồn tại trước năm 1991.
Andy

9

Không, phát triển cho OS X và iOS sử dụng mẫu Model View Controller.


2
Cuối cùng, một câu trả lời cho điểm đầu tiên và thứ hai mà không cần bình luận.
JeffO

8

Đặt câu hỏi trong môi trường Microsoft và nhiều người sẽ cho rằng bạn có nghĩa là Asp.Net MVC là một triển khai MVC dành riêng cho web.

Thật không may, có nhiều người không nhận ra rằng đây là một triển khai của mô hình MVC và nghĩ rằng chúng là các thuật ngữ có thể hoán đổi cho nhau, dẫn đến một giả định về "chỉ web".


3
+1 đây là vấn đề với việc đặt tên một nền tảng theo phương pháp luận. Khi mọi người được giới thiệu về nền tảng đầu tiên, họ không thấy sự khác biệt.
MattDavey

@Ozz điều này đã giải thích lý do tại sao các nhà phát triển khác luôn sử dụng để nói về web khi MVC là chủ đề
Deeptechtons

1
Xin vui lòng ngừng vẽ các nhà phát triển Microsoft là ngu ngốc, cảm ơn.
Andy

@Andy - đó không phải là nhà phát triển MS bash, bản thân tôi là nhà phát triển Asp.Net MVC và tôi đứng trước câu trả lời ban đầu. Tôi đã không nói "tất cả" mọi người, hoặc "tất cả" các nhà phát triển .net, chỉ là một quan sát về một giả định hoặc sai lầm mà tôi đã thấy nhiều người mắc phải. Cảm ơn.
ozz

2

Ít nhất theo như tôi biết, việc triển khai MVC đầu tiên là ở Smalltalk. Nó chắc chắn có mặt trong Smalltalk-80. Mặc dù tôi không có tài liệu nào hữu ích để chứng minh điều đó, nhưng tôi tin rằng nó (hoặc một cái gì đó khá giống nhau) đã ở Smalltalk trong một vài năm sau đó.

Hầu hết các khung GUI OO đã bao gồm ít nhất một số biến thể của MVC. Tuy nhiên, tôi không chắc chắn chính xác "superset" nghĩa là gì trong trường hợp này. Thật khó để nói liệu bất kỳ biến thể đã cho nào là siêu bộ, tập hợp con hay ngang hàng của MVC, nhưng tôi có xu hướng xem xét hầu hết các biến thể đó.

Trong mọi trường hợp, nhiều (hầu hết?) Trong số này đã được sử dụng để phát triển máy tính để bàn, không phải phát triển web. Nhờ một số bằng sáng chế cũ của AT & T, hầu hết các hệ thống cửa sổ yêu cầu các chương trình để có thể tạo lại quan điểm theo yêu cầu. Điều này (gần như) buộc ít nhất một mức độ phân tách giữa mã duy trì trạng thái hiện tại (mô hình) và mã hiển thị trạng thái đó (chế độ xem). Điều đó vẫn còn rất nhiều chỗ cho biến thể trong 1) mức độ mà chức năng của bộ điều khiển bị cô lập và 2) các chi tiết chính xác về nơi để vẽ các đường giữa mỗi phần chính.



1

Vì vậy, có rất nhiều mẫu thiết kế khác nhau trong lĩnh vực này.

  • Trình bày mô hình xem (mvp)
  • Mô hình Chế độ xem Chế độ xem (mvvp)
  • Bộ điều khiển xem mô hình
  • Mô hình 2

và như thế. Trong những năm qua, những thứ này đã được đan xen, trộn lẫn với nhau, thay đổi và áp dụng trong nhiều bối cảnh khác nhau. Điều quan trọng ở đây là mẫu thiết kế MVC từ năm 1977 đã thay đổi khá nhiều và không còn là mẫu thiết kế được sử dụng bởi các khung web của máy chủ. Như một ví dụ trong triển khai smalltalk ban đầu, Model sẽ quan sát khung nhìn để thay đổi, điều này không còn xảy ra nữa vì các máy chủ chỉ đơn giản là không thể quan sát các phần tử html trong trình duyệt của người dùng. Thay vào đó, nếu khung nhìn thay đổi, khung nhìn sẽ gửi yêu cầu đến bộ điều khiển, sau đó sẽ cập nhật khung nhìn. Một lần nữa, việc triển khai MVC ban đầu không được tuân thủ, vì một bản cập nhật cho mô hình sẽ ngụ ý rằng tất cả các khung nhìn phụ thuộc vào mô hình sẽ được cập nhật.

Các khung web hiện đại tuân theo kiến ​​trúc ba tầng đơn giản còn được gọi là kiến ​​trúc Mô hình 2.

Tất nhiên có các ví dụ về kiến ​​trúc MVC thực trên web, nhưng chúng thường chỉ ở phía máy khách, được kết nối với máy chủ theo kiến ​​trúc Mô hình 2, vì các khung nhìn là xml và json và không được quan sát để thay đổi. Ví dụ về kiến ​​trúc mvc thuần phía khách hàng là Sencha Touch và Sproutcore.

Nếu bạn có MVC trong trình duyệt, mvc như trên máy chủ và mvc như lớp dữ liệu, bạn có triển khai mvc phân cấp.

Ghi chú. Tôi chỉ nói về các khung web, các triển khai khác của MVC như java swing và Flex có các khác biệt triển khai khác.


Chắc chắn không có ý nghĩa tại sao mọi người xuống bầu người khác, nếu có gì sai xin vui lòng nói với họ và cho một cơ hội để sửa quan điểm của họ. Nếu họ không có kiến ​​thức về chủ đề này, một giáo viên giỏi sẽ hướng họ đến đúng nguồn chứ không đánh bại anh ta cho đến khi anh ta học đúng !!
Deeptechtons

câu hỏi giả định rằng mvc và web hoạt động tốt để thu thập và cầu xin cho mvc không phải web, vì vậy khi bạn chỉ đưa ra ví dụ về mvc trong ngữ cảnh web: -1
hildred 27/11/13

1

Một điều bạn phải biết là có nhiều hương vị của MVC cũng như có các khung yêu cầu thực hiện MVC.

Hầu hết đều đồng ý về thực tế rằng Mô hình giữ một số trạng thái và Chế độ xem hiển thị nó. Nhưng Người điều khiển có vai trò rất khác nhau.

Trong Smalltalk, nơi được mô tả lần đầu tiên, Mô hình là cốt lõi của ứng dụng, dữ liệu và phương thức kinh doanh của bạn. Chế độ xem là biểu diễn đồ họa về trạng thái của ứng dụng (còn gọi là Model) và Bộ điều khiển quản lý các sự kiện đầu vào, chuột và bàn phím của người dùng. Ví dụ, Bộ điều khiển định tuyến các sự kiện bàn phím đến thành phần xem có tiêu điểm.

Trong các trang .jsp, Model chủ yếu là dữ liệu, View hiển thị Model đó thành HTML và Bộ điều khiển thực hiện định tuyến của Model sang Chế độ xem phù hợp để hiển thị nó.

Vì vậy, để trả lời câu hỏi của bạn, trong khi MVC được sử dụng cả trên các ứng dụng độc lập (Java, .Net, Flex) và web (trang jsp), thì đó là một điều rất khác. Điều đó có nghĩa là MVC mà bạn biết không được sử dụng trong các ứng dụng độc lập.

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.