12

Tôi ban đầu sẽ làm cho câu hỏi này trở thành một câu hỏi dài hơn, nhưng tôi cảm thấy như ngắn hơn tôi làm cho nó, thì tốt hơn bạn sẽ hiểu những gì tôi có ý nghĩa.Tại sao MVC lại phổ biến đến vậy?

  • Mẫu kiến ​​trúc MVC có 3 phụ thuộc. Chế độ xem phụ thuộc vào kiểu máy. Controller phụ thuộc vào View và Model. Mô hình độc lập.

  • Mẫu kiến ​​trúc Lớp xác định các phụ thuộc N - 1, trong đó N là số lượng Lớp.

Cho ba lớp: Mô hình, Chế độ xem và Bộ điều khiển, chỉ có 2 phụ thuộc, trái ngược với 3 với MVC truyền thống. Cấu trúc trông như thế này:

View ---> Controller ---> Model 

[Xem phụ thuộc vào điều khiển, điều khiển phụ thuộc vào Model]

Dường như với tôi rằng phong cách này hoàn thành các mục tiêu tương tự sản xuất khớp nối lỏng hơn. Tại sao phong cách này không phổ biến hơn? Liệu nó có thực sự hoàn thành các mục tiêu giống nhau không?

Chỉnh sửa: Không phải ASP.NET MVC, chỉ là mẫu.

liên quan đến bài griegs của Với:

  • Theo như chế giễu, lớp vẫn cho phép bạn sử dụng bộ xử lý mẫu Command để mô phỏng nhấp chuột vào nút, cũng như bất kỳ phạm vi khác của sự kiện.
  • Thay đổi giao diện người dùng vẫn rất dễ dàng, thậm chí có thể dễ dàng hơn. Trong MVC, Controller và View có xu hướng kết hợp với nhau. Lớp tạo ra sự tách biệt nghiêm ngặt. Cả hai Lớp là các hộp đen, tự do thay đổi độc lập trong quá trình triển khai.
  • Bộ điều khiển có 0 phụ thuộc vào Chế độ xem. Xem có thể được viết, và thời gian vẫn có thể được lưu với khớp nối lỏng lẻo.

Trả lời

1

Tôi đã không nhận lại vấn đề này trong một thời gian dài, chủ yếu là bởi vì tôi vẫn đang suy nghĩ. Tôi đã không hài lòng với những câu trả lời tôi nhận được, họ không thực sự trả lời câu hỏi của tôi.

Một giáo sư, gần đây, đã chỉ đạo tôi đi đúng hướng. Về cơ bản, anh ấy đã nói với tôi điều này: Các lớp có Kiểu riêng, Chế độ xem và Bộ điều khiển MVC. Trong mô hình kiến ​​trúc vanilla MVC, sự phụ thuộc giữa Chế độ xem với Mô hình thường không được sử dụng và bạn có hiệu quả với các Lớp. Ý tưởng là như nhau, việc đặt tên chỉ là người nghèo.

15

Bởi vì bạn tách giao diện khỏi bộ điều khiển, việc thay đổi sẽ dễ dàng hơn.

Cũng xem xét trường hợp bạn cần bắt đầu dự án nhưng tác phẩm nghệ thuật sẽ không sẵn sàng trong nhiều tuần hoặc vài tháng. Bạn có chờ đợi hoặc làm bạn viết tất cả các mã cần thiết cho các trang và chỉ cần dây lên xem để điều khiển.

Ít nhất đó là những gì chúng tôi đã làm và chúng tôi đã lưu hàng tháng.

Ngoài ra, nó còn giúp thay đổi giao diện người dùng dễ dàng hơn để đối phó vì không có mã nào trong các trang aspx của chúng tôi đã làm bất kỳ điều gì.

thử nghiệm của chúng tôi cũng tốt hơn là chúng ta có thể giả lập bất cứ điều gì như nhấp chuột vào nút, vv

Và nếu bạn đang nói về khuôn khổ asp.net-MVC, không có mã trong các tập tin aspx và không ViewState v.v.

+0

Bạn đang giả sử anh ta đang đề cập đến ASP.NET MVC, không phải mẫu MVC, đó là những gì anh ta hỏi. –

+10

Không, tôi không. Chỉ trong tình cảm cuối cùng của tôi là tôi làm điều đó và tôi thậm chí còn nói "Nếu bạn đang nói về ..." – griegs

+0

Quan điểm và bộ điều khiển và vốn đã kết hợp trong MVC anyway. Vì cả hai được mô hình hóa dưới dạng hộp đen, mỗi hộp có thể được chế nhạo và/hoặc sửa đổi. Tôi không cảm thấy bạn chỉ ra một sự khác biệt, nhiều như điểm tương đồng. – Mike

3

Trong MVC phù hợp, bộ điều khiển không phụ thuộc vào chế độ xem. Hoặc có lẽ tôi không hiểu nó một cách chính xác.

Mô hình xác định dữ liệu.

Chế độ xem xác định đầu ra trông như thế nào.

Và bộ điều khiển là người dịch từ ngữ pháp mô hình được hiểu đến ngữ pháp được hiểu.

Vì vậy, về cơ bản bộ điều khiển là độc lập. Chế độ xem độc lập. Và mô hình độc lập.

Có? Không?

+0

Đây là ấn tượng của tôi: http://prajwal-tuladhar.net.np/wp-content/uploads/2008/10/mvc-architecture.png – Mike

+2

Mỗi (nhiều hoặc ít) độc lập, nhưng bạn có vai trò bộ điều khiển sai. Bộ điều khiển về cơ bản nhận đầu vào của người dùng và sửa đổi mô hình hoặc xem phù hợp (mặc dù một số triển khai sẽ bỏ qua bộ điều khiển cho các hành động chỉ sửa đổi chế độ xem). –

-1

Theo tôi, bạn nên thử nó trong chương trình của mình, bạn có thể sử dụng ruby ​​trên đường ray, hoặc codeigniter (cho php), những khung công tác tuyệt vời này có thể hữu ích cho bạn hiểu MVC.

+0

CakePHP cũng là khung MVC đẹp cho PHP. Với Perl, bạn có thể thử Catalyst. .NET và Java, tốt, tôi đoán mọi người đã biết tên tuổi lớn :) –

1

Tôi sẽ được in đậm và cố gắng giải thích lý do tại sao phương pháp của bạn không bắt kịp.

Mô hình MVC về cơ bản yêu cầu chế độ xem và các lớp mô hình đồng ý trên API. Vì một cái khác phục vụ và không có sự phụ thuộc bên trong mã nên nó rời khỏi bộ điều khiển để xử lý một cách tổng quát, tất cả những gì cần làm là lấy một cấu trúc nhất định trong lớp xem và gọi API khớp trên lớp mô hình.

Bạn sẽ lưu ý rằng việc đồng ý về một API giữa chế độ xem và mô hình thực sự không phải là một vấn đề lớn mà nó phải xảy ra. Và những gì bạn nhận được là tách biệt tốt giữa phát triển front-end back-end.

Trong giải pháp được đề xuất của bạn, cần phải có nhiều phát triển ở phía bộ điều khiển. Bộ điều khiển sẽ được yêu cầu hiểu tất cả các phần tử trong khung nhìn và ánh xạ chúng tới các cuộc gọi cụ thể được yêu cầu trên lớp mô hình. Vì bộ điều khiển là một điểm truy cập duy nhất kết nối nhiều chế độ xem với nhiều mô hình, điều này có thể nhanh chóng thoát ra và kết thúc là một mô-đun điều khiển không thể hiểu được.

Nhìn vào một số ví dụ struts2 để xem những gì tôi có nghĩa là ...

+0

Lớp điều khiển yêu cầu hoàn toàn không phụ thuộc vào lớp Xem. Trong thực tế, mô hình hạn chế nó. Ngoài ra, MVC nói rằng có một Bộ điều khiển cho mỗi Chế độ xem, với nhiều Chế độ xem và một Mô hình. Vì vậy, đó là chăm sóc quá. – Mike

+0

Vì vậy, nếu tôi gửi biểu mẫu trên trang web (chế độ xem), cách áp dụng logic nghiệp vụ thích hợp (mô hình)? Nếu chế độ xem và mô hình của bạn thực sự độc lập thì bộ điều khiển phải có định nghĩa: (input1 -> phương thức gọi 1,2,3) (phương thức gọi 2 -> 2,3,5) ... Tôi tin rằng đây là những gì thực hiện hầu hết các mô hình đang cố gắng để tránh – Asaf

+0

Nếu phương pháp 1, 2, 3 là phương pháp mô hình, trớ trêu thay, có, tôi đang cố gắng để đạt được điều này. Nó làm cho rất nhiều ý nghĩa. Mùi thậm chí giống như làm sạch dễ dàng cho mẫu Command. – Mike

1

Tôi nghĩ rằng tôi hiểu quan điểm của bạn:

Có bạn có thể làm cho Chỉ xem phụ thuộc vào điều khiển chỉ bằng cách làm cho bộ điều khiển chuyển đổi (sử dụng PHP làm ví dụ) các đối tượng Model thành các đối tượng không Model như các mảng đơn giản. Như chúng ta đã biết, việc thực hiện phép chuyển đổi này có thể tốn nhiều công sức hơn nó có giá trị nếu việc tách không thực sự cần thiết. Nếu View sử dụng các đối tượng Model thì nó có sự phụ thuộc này. Tuy nhiên, điều này có thể được thuyên giảm một chút bằng cách có View chỉ phụ thuộc vào Controller cho đầu vào cần thiết của nó, có thể là các đối tượng Model.

Khuôn khổ PHP của Symfony khuyến khích kiểu dáng này của bộ điều khiển gầy xáo giữa Mô hình và Chế độ xem. Bạn vẫn có thể gọi trực tiếp trên lớp Mô hình để truy xuất các đối tượng trong lớp Chế độ xem nhưng nó được khuyến khích mạnh mẽ đối với các vấn đề về khớp nối mà bạn mang đến. Trong khung nhìn, bạn có thể gọi hàm include_component() mà thực sự quay lại Bộ điều khiển nếu bạn cần truy vấn Mô hình.

+0

Đúng, bạn đã có nó tại chỗ, @Rob Olmos. Vì vậy, nó được sử dụng đôi khi. Tôi chỉ ngạc nhiên khi nó không được sử dụng nhiều hơn, đặc biệt là cho rằng một lúc không ai thực sự hiểu những gì tôi đã nói về. – Mike

+0

Ngay cả trong tổ chức của tôi, chúng tôi vẫn đang tranh luận xem liệu có buộc Bộ điều khiển chỉ chuyển các biến không phải Mô hình cho Chế độ xem hay không. Chưa có quyết định nào nhưng chúng tôi đang thử nghiệm tính khả thi ... –

0

Chọn mẫu trình bày cho phát triển web mới hoặc doanh nghiệp trên nền tảng Microsoft là một nhiệm vụ khó khăn, theo ý kiến ​​của tôi chỉ có ba; Xem Model, Model-View-Presenter (MVP) hoặc ASP.NET MVC (một dẫn xuất Model2).

Bạn có thể đọc toàn bộ bài viết tại đây ASP.NET MVC Patterns

0

Tôi muốn thêm một số thứ khác. Trước hết, theo quan điểm của tôi, chúng tôi sử dụng mô hình làm vùng chứa cho thông tin chúng tôi muốn chuyển và hiển thị trên chế độ xem.Thông thường các phương pháp hành động vào bộ điều khiển kết thúc với cái nhìn trở lại ("VIEWNAME", người mẫu) .Công xem bản thân probabily sẽ thay đổi layour của nó so với mô hình:

trên quan điểm:

if (model.something == true) {

%>

somethign để hiển thị

<%

}

Tại poinf này định nghĩa của mô hình là khó tìm.

tôi có thể nói (đặc biệt là trên conext doanh nghiệp) là hai "mô hình"

là một trong những mô hình miền/mô hình thực thể hoặc làm thế nào bạn muốn gọi nó mà kết thúc tốt đẹp các dữ liệu đến từ các lớp dưới (cơ sở dữ liệu, vv) và chế độ xem có chứa thông tin chúng tôi muốn hiển thị cùng với bất kỳ thông tin nào khác mà chúng tôi cần để ẩn/hiển thị phần giao diện

Bộ điều khiển dàn xếp các chế độ xem và là người giám sát từ chế độ xem nhưng một phần nhỏ từ mô hình:

vào bộ điều khiển

.210

pulic ActionResult Index() {

....

if (model.BoolProperty == true) {

trở lại ("firstView);

}

khác

{

trở lại ("secondView");

}

}

Tôi hy vọng nó có ý nghĩa

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