2008-09-17 42 views
15

Khi tôi lần đầu tiên nghe nói về StackOverflow, và nghe nói rằng nó đã được xây dựng trong ASP.Net MVC, tôi là một chút bối rối. Tôi nghĩ ASP.Net luôn là một ví dụ về kiến ​​trúc MVC. Bạn có trang .aspx cung cấp khung nhìn, trang .aspx.vb cung cấp bộ điều khiển và bạn có thể tạo một lớp khác làm mô hình. Quá trình sử dụng MVC trong ASP.Net được mô tả trong Microsoft article này.ASP.Net MVC là gì?

Vì vậy, câu hỏi của tôi là. Những gì hiện ASP.Net MVC cung cấp mà bạn sẽ không thể làm gì với ASP.Net thường xuyên (thậm chí như xa trở lại như ASP.Net 1.1)? Nó chỉ là các URL ưa thích? Có phải chỉ vì quyền khoe khoang cho MS để có thể so sánh mình với các công nghệ mới như Ruby On Rails, và nói, "Chúng ta cũng có thể làm điều đó"? Có một cái gì đó nhiều hơn mà ASP.Net MVC thực sự cung cấp, chứ không phải là một vài mẫu bổ sung trong File-> New menu?

Tôi có thể đang thực sự hoài nghi và tiêu cực ngay bây giờ, vì vậy tôi sẽ dừng lại. Nhưng tôi thực sự muốn biết những gì ASP.Net MVC thực sự cung cấp. Ngoài ra, nếu ai đó có thể cho tôi biết tại sao Model-View-Controller và không theo thứ tự các lớp View-Controller-Model hoặc Model-Control-View tùy thuộc vào việc bạn đang đi từ trên xuống dưới hay ngược lại, tôi thực sự đánh giá cao điều đó.

EDIT

Ngoài ra, nó có thể là giá trị chỉ ra rằng tôi chưa bao giờ thực sự quan tâm cho các hình thức web (AKA điều khiển máy chủ) mô hình một trong hai. Tôi đã chỉ sử dụng nó tối thiểu, và không bao giờ vào công việc.

Trả lời

14

.aspx không hoàn thành mẫu MVC vì trang aspx ('view') được gọi trước mã phía sau ('bộ điều khiển').

Điều này có nghĩa là bộ điều khiển có 'sự phụ thuộc cứng' trên chế độ xem, điều này là rất nhiều so với nguyên tắc MVC.

Một trong những lợi ích cốt lõi của MVC là nó cho phép bạn kiểm tra bộ điều khiển (có chứa rất nhiều logic) mà không cần tạo ra một khung nhìn thực. Bạn chỉ đơn giản là không thể làm điều này trong thế giới .aspx.

Kiểm tra tất cả bộ điều khiển bằng chính nó nhanh hơn nhiều so với việc khởi tạo toàn bộ đường ống asp.net (ứng dụng, yêu cầu, phản hồi, trạng thái xem, trạng thái phiên v.v ...).

+0

Leon, có thể kiểm tra đơn vị điều khiển - kiểm tra bài viết này bằng cách Scott Guthrie. http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx Tôi tin rằng API đã thay đổi trong các bản phát hành beta gần đây, nhưng nguyên tắc là âm thanh. (Người hâm mộ bí mật bí mật, BTW) – belugabob

+0

Doh! - chỉ cần đọc bài tiếp theo và nhận ra rằng ai đó khác biết được tiềm năng kiểm tra của ASP MVC – belugabob

0

ASP.Net với mã đằng sau là gần như MVC - nhưng không - một điều lớn mà làm cho nó không phải là codebehinds được gắn trực tiếp với aspx - đó là một thành phần lớn của MVC. Nếu bạn đang nghĩ về các codebehinds như bộ điều khiển - nên được tách hoàn toàn khỏi khung nhìn. .NET MVC mới làm tròn điều này - và mang đến một khung MVC hoàn chỉnh. Mặc dù đã có sẵn cho .NET rồi (xem Spring.NET).

1

Chủ yếu, nó làm cho nó rất dễ dàng để tạo ra các trang web có thể kiểm tra với sự phân chia rõ ràng trách nhiệm. Việc tạo các giao diện người dùng XHTML hợp lệ cũng dễ dàng hơn nhiều bằng cách sử dụng khung MVC mới.

Tôi đã sử dụng CTP thứ hai (tôi nghĩ rằng họ đang trên năm bây giờ) để bắt đầu làm việc trên một trang web và đã tạo một vài ứng dụng web trước đó, tôi phải nói hàng trăm lần tốt hơn so với sử dụng máy chủ mô hình điều khiển.

Điều khiển máy chủ là tốt khi bạn không biết mình đang làm gì. Khi bạn bắt đầu tìm hiểu về cách ứng dụng web hoạt động, bạn bắt đầu chiến đấu với chúng. Cuối cùng, bạn phải viết của riêng bạn để vượt qua những thiếu sót của điều khiển hiện tại. Tại thời điểm này, MVC bắt đầu tỏa sáng. Và đó thậm chí không xem xét khả năng kiểm tra trang web của bạn ...

0

Tôi nhìn qua một vài ví dụ đơn giản như this one. Tôi có thể thấy sự khác biệt. Tuy nhiên, tôi không thực sự thấy làm thế nào MVC uncouples xem từ bộ điều khiển. Chế độ xem vẫn tham chiếu nội dung trong bộ điều khiển. Tôi thấy làm thế nào nó làm cho nó dễ dàng hơn nhiều để kiểm tra, và rằng ít nhất là trong MVC bộ điều khiển không có bất kỳ kiến ​​thức về xem. Và bạn sẽ không phải xử lý khung nhìn để gọi các phương thức trong bộ điều khiển. Tôi có thể thấy đó là một bước nhảy vọt, mặc dù ngay từ cái nhìn đầu tiên nó có thể không có vẻ nhiều.

Tôi đồng ý với @Will về việc chống lại các điều khiển máy chủ. Tôi đã không bao giờ làm việc trong một tình huống mà họ đã thực sự được sử dụng, nhưng nhiều người tôi biết những người có, đã chạy vào khá một vài hạn chế với họ.

1

Không còn ID html được tạo tự động nào nữa !!! Bất cứ ai làm bất kỳ loại javascript đánh giá cao thực tế này.

7

Scott Guthrie giải thích nó trong bài này "ASP.NET MVC Framework"

  • Nó cho phép tách sạch các mối quan tâm , testability và TDD theo mặc định . Tất cả các hợp đồng cốt lõi trong phạm vi khung MVC là giao diện dựa trên và dễ dàng giả lập (bao gồm giao diện dựa trên IHttpRequest/IHttpResponse nội tại). Bạn có thể kiểm tra ứng dụng mà không cần phải chạy các bộ điều khiển trong quá trình ASP.NET (thực hiện kiểm tra đơn vị nhanh). Bạn có thể sử dụng bất kỳ khung kiểm tra đơn vị nào mà bạn muốn thực hiện thử nghiệm này (bao gồm NUnit, MBUnit, MS Test, v.v.).

  • Thiết bị này có khả năng mở rộng cao và có thể cắm được. Mọi thứ trong khung MVC được thiết kế sao cho nó có thể dễ dàng thay thế/tùy chỉnh (ví dụ: ví dụ: bạn có thể tùy ý cắm công cụ xem của riêng bạn, chính sách định tuyến, serialization tham số, v.v ...). Nó cũng hỗ trợ sử dụng hiện tại tiêm phụ thuộc và IOC container mô hình (Windsor, Spring.Net, NHibernate, v.v ...).

  • Nó bao gồm một thành phần ánh xạ URL rất mạnh mẽ cho phép bạn tạo ứng dụng có URL sạch. URL không cần phải có các tiện ích mở rộng bên trong chúng và được thiết kế để dễ dàng hỗ trợ các mẫu đặt tên là SEO và REST thân thiện với mô hình . Ví dụ: tôi có thể dễ dàng ánh xạ/products/edit/4 URL đến hành động "Chỉnh sửa" của lớp ProductsController trong dự án ở trên hoặc bản đồ /Blogs/scottgu/10-10-2007/SomeTopic/ URL tới hành động "DisplayPost" của lớp BlogEngineController.

  • Khung MVC hỗ trợ sử dụng ASP.NET .ASPX hiện tại,.Ascx, và .Master đánh dấu các tập tin như "xem mẫu" (có nghĩa là bạn có thể dễ dàng sử dụng các tính năng hiện ASP.NET như lồng nhau trang chủ, <% =%> đoạn, điều khiển máy chủ khai báo, mẫu, liên kết dữ liệu , nội địa hóa, v.v.). Tuy nhiên, nó không sử dụng mô hình hậu hiện có cho các tương tác quay lại máy chủ. Thay vào đó, bạn sẽ định tuyến tất cả người dùng cuối tương tác với một lớp điều khiển thay - giúp đảm bảo sạch tách mối quan tâm và testability (nó cũng có nghĩa là không ViewState hoặc trang vòng đời với tầm MVC dựa).

  • Khung ASP.NET MVC hỗ trợ đầy đủ các tính năng hiện có ASP.NET như hình thức/cửa sổ xác thực, URL ủy quyền, thành viên/vai trò, đầu ra và dữ liệu bộ nhớ đệm, phiên/hồ sơ quản lý nhà nước, theo dõi sức khỏe, cấu hình hệ thống, kiến ​​trúc nhà cung cấp, , vv

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