So sánh mvc và webform
Sự khác nhau giữa Asp.net webform và Asp.net MVC cái nào hay hơn, cái nào phát triển hơn, thường dùng hơn. Bài viết này sẽ giúp bạn có cái nhìn tổng quan hơn về vấn đề này nhé. Show Giới thiệu Dạo qua một số diễn đàn, cộng đồng về tin học, lập trình, chúng ta thường bắt gặp một số câu hỏi kiểu như:
Và trong bài viết này, mình sẽ giúp các bạn có cái nhìn đúng hơn về 2 mô hình này. So sánh MVC và Webform
Chốt Thông qua sự so sánh trên, phần nào đã đem đến cho bạn cái nhìn tổng quan về 2 mô hình. Tùy vào một kịch bản phù hợp mà mình cần sử dụng mô hình nào mà thôi. Bài viết dựa trên ý kiến chủ quan, và còn sơ sài, chúng ta cùng nhau tham khảo để đi đến cái nhìn tổng quan nhất cho những “lứa măng non” tham khảo nhé. _Bài viết này được viết khi ASP.NET MVC 2 đã ra khỏi dây chuyền lắp ráp. Kể từ đó MVC 3 (4) đã được phát hành. Một cải tiến là "application/json" kiểu MIME được hỗ trợ đầy đủ. Điều này có nghĩa rằng bạn có thể POST và trả về nội dung JSON. _ Làm thế nào để liên kết Fields của FormCác JSON "Note" field có liên quan đến Form sử dụng JQuery DataLinking . Datalinking là một JQuery Plugin mới cho phép bạn liên kết một đối tượng Javascript đến một trường DOM bằng cách sử dụng .link() và .unlink(). Hãy nhớ rằng DataLinking còn là bản Beta và vẫn có những trục trặc thường xuyên. Ví dụ, khi thực hiện một .ajax() post bạn cần phải chắc chắn rằng bạn .unlink()đối tượng Javascript của bạn hoặc JQuery sẽ ném một lỗi khó chịu. ASP.NET Web Forms Form POSTMột trang ASP.NET Web Forms có thể được tích hợp vào ứng dụng web ASP.NET MVC của bạn. ASP.NET Routing cho phép bạn Route một URL vào một trang dễ dàng như một Controller. MapPageRoute() cho phép bạn map một yêu cầu URL tới một ASP.NET Web Forms. Route này cấu hình yêu cầu URL cho "Notepad/WebFormsNotepad" để gọi WebFormsNotepad.aspx trang cho một phản hồi. routes.MapPageRoute( "WebFormsNotesIndex", "Notepad/WebFormsNotepad", "~/WebFormsNotepad.aspx");Global.asax.cs trong ScottsJewels.Samples.Notepad Các trang có chứa một server-aware Form để lấy "Notes". Các mẫu có chứa một server-aware Button được đặt tên "getNotesByAuthor". Các nút chỉ định một hàm xử lý sự kiện phía máy chủ có tên là "OnSearchAuthor" để xử lý các sự kiện OnClick. Khi nút được nhấp một POST sẽ được submit lên máy chủ Web cho "NotePad/WebFormsNotepad". POST sẽ chứa dữ liệu cho server-aware Form. ASP.NET Routing sẽ hướng các yêu cầu đến WebFormsNotepad.aspx. Các sự kiện onload của trang sau đó sẽ được bắn tiếp theo phương pháp "OnSearchAuthor". <form runat="server"> <div> <fieldset> <asp:TextBox ID="searchAuthor" runat="server" /> <asp:Button ID="getNotesByAuthor" OnClick="OnSearchAuthor" runat="server" Text="Search Author"/> </fieldset> </div> </form>WebFormsNotePad.aspx trong ScottsJewels.Samples.Notepad public partial class WebFormsNotepad : System.Web.UI.Page { protected List<Note> Model; protected void OnSearchAuthor(object sender, EventArgs e) { if (searchAuthor.Text != null && !string.IsNullOrEmpty(searchAuthor.Text.Trim())) { Model = NotepadDataAccess.GetInstance().GetNotesByAuthor(searchAuthor.Text); } else { Model = NotepadDataAccess.GetInstance().GetNotes(); } } ...WebFormsNotePad.aspx.cs trong ScottsJewels.Samples.Notepad Đây là những gì còn lại của Markup của trang. Như bạn có thể nhìn thấy nó trông rất giống với ASP.NET MVC View đối ứng. Điều này đã được thực hiện vào một phần để đơn giản hóa so với ASP.NET MVC. Hãy nhớ rằng một trang ASP.NET Web Forms rất khác so với một ASP.NET MVC View. Mặc dù không thể hiện trong "Notepad" một trang có thể được liên kết với nhiều nguồn dữ liệu của các loại khác nhau. Một trang cũng có điều khiển máy chủ cao hơn hẳn. Các máy chủ Đưa ra một khái niệm coding có thể lưu được trạng thái là ViewState . <%@ Page Title="My Notepad (Web Forms)" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="WebFormsNotepad.aspx.cs" Inherits="ScottsJewels.Samples.Notepad.WebFormsNotepad" %> <%@ Import Namespace="ScottsJewels" %> <%@ Import Namespace="ScottsJewels.Samples.Notepad.DataModels" %> ... <asp:Content ContentPlaceHolderID="bodyContent" runat="server"> ... <div id="notes"> <% if (Model != null && Model.Count > 0) { foreach (Note note in Model) { %> <div class="note"> <span><%=note.Title%> by <%=note.Author%></span> <p> <%=note.Text%> </p> </div> <% } } %> </div> </asp:Content>WebFormsNotePad.aspx.cs trong ScottsJewels.Samples.Notepad ASP.NET Web Forms Form POST sử dụng AJAXTrong một ASP.NET Web Forms Application có hai cách để xử lý một AJAX Form POST trên máy chủ Web. Bạn có thể dùng một Web Service. Hoặc, bạn có thể dùng một Web Method trên trang riêng của mình. Nếu bạn lưu trữ một Form Web Page trong một ứng dụng ASP.NET MVC bạn có khả năng để xử lý AJAX Form POST sử dụng một bộ điều khiển MVC. Điều này cho phép tận dụng các cơ sở mã từ trước ASP.NET MVC Form POST sử dụng AJAX. Nếu bạn nghĩ về cách làm việc này nó khá đơn giản. Các AJAX Form POST yêu cầu cho một tài nguyên. Các tài nguyên được ánh xạ tới một điều khiển bằng ASP.NET Routing. Form không quan tâm những gì của quá trình nó yêu cầu - chỉ JSON được trả về. Bộ điều khiển không quan tâm đến yêu cầu đến từ đâu - chỉ cần làm thế nào để xử lý nó. Bằng cách tận dụng các điều khiển và client-side Javascript của ASP.NET MVC Form POST sử dụng AJAX có rất ít việc cần làm . Đây là những gì các "addNoteForm" Form trông giống như trên Web Forms Notepad. Nó sẽ POST để các URL tương tự như "addNoteForm" Form MVC Notepad. ASP.NET Routing sẽ định tuyến các yêu cầu để điều khiển tương tự và được sử dụng bởi các ActionMethod MVC Notepad. Các ActionMethod sẽ trả về một JsonResult. <form action="<%= ResolveUrl("~/Notepad/AddNote") %>" id="addNoteForm"> <div> <fieldset> <legend>Add Note</legend> <p> <label for="author">Author :</label> <input style="position:absolute; left: 120px;" type="text" id="Author" name="Author"/> </p> <p> <label for="title">Title :</label> <input style="position:absolute; left: 120px;" type="text" id="Title" name="Title"/> </p> <p> <label for="text">Text :</label> <input style="position:absolute; left: 120px;" type="text" id="Text" name="Text"/> </p> <p> <button type="submit" name="button" value="GetNotes">Add Note</button> </p> </fieldset> <div id="message"></div> </div> </form>WebFormsNotePad.aspx trong ScottsJewels.Samples.Notepad Content Type hạn chế của một WCF ServiceTrong tất cả các lý do thật sự của tôi cho việc sử dụng một bộ điều khiển MVC qua một web Service hoặc Web Method ẩn đi một số vấn đề cơ bản. Tôi đã không thể có được một phương pháp một trang Web làm việc trong khuôn khổ ASP.NET Routing và tiếp tục nhận được một tài nguyên Không tìm thấy (404). Tôi đã có một chút may mắn hơn khi sử dụng một WCF Web Service ngoại trừ việc nó không thể phân tích các dữ liệu mẫu trong yêu cầu. Trước đây tôi đã nói như thế nào một ASP.NET MVC Controller là không thể để phân tích nội dung JSON nhưng có thể phân tích nội dung Form. Vâng, trớ trêu thay WCF là khả năng của các đối diện chính xác . Thật là đáng tiếc. Thay vì phát minh lại bánh xe và giới thiệu một số Javascript JSON-cụ thể mới, tôi quyết định "đi với nó" và tận dụng những gì đã có sẵn - Controller MVC. Ưu và nhược điểmKhông so sánh mà không có một danh sách những thuận và khó của mỗi công nghệ, phải không? Thoạt nhìn nó có vẻ là ASP.NET MVC là cao hơn hẳn chỉ đơn giản là vì nó có nhiều thuận và ít Nhược điểm khi so sánh với ASP.NET Web Forms. Đây không phải là trường hợp. Các mục trong danh sách sau đây cần được cân dựa trên ba điều ...
ASP.NET MVCƯu điểm Thiết kế tốt là baked-in. MVC thúc đẩy thiết kế tốt out-of-the-box. Nó buộc bạn vào nhóm chức năng tương tự vào các đơn vị trong khi mỗi thực thể có ít sự trùng lặp càng tốt. Điều này được gọi là tách các mối quan tâm . Cụ thể, lực lượng ASP.NET MVC bạn để phân cách trình bày của bạn ("View"), business logic (các "Controller"), và dữ liệu ("Model") vào các lớp riêng biệt.
Một ViewState giảm tính hữu ích của các Controls Server "rich" được sử dụng trong ASP.NET Web Forms. Như ASP.NET MVC này phụ thuộc rất nhiều vào sự phát triển phía máy khách sử dụng Javascript và JQuery. ASP.NET Web Forms cho phép bạn treo lên các sự kiện cho sự kiện điều khiển sẽ kích hoạt một postback đến server. Trong ASP.NET MVC không có những điều như một postback hướng sự kiện. Tất cả bài viết trong ASP.NET MVC phải xảy ra từ bên trong một Form HTML và sử dụng các tiêu chuẩn HTTP GET và POST.
Nhược điểm
ASP.NET Web FormsƯu điểm
Nhược điểm
Phần kết luậnPhew! Vâng, có bạn có nó - một sự so sánh của các framework phát triển web hàng đầu của Microsoft. Nếu bạn có bất kỳ câu hỏi, ý kiến, hoặc gợi ý xin vui lòng cho tôi biết. Nguồn: http://scottsjewels.blogspot.com/ |