Sự khác biệt giữa ASP.NET MVC và ASP.NET WebForms là gì?

Cập nhật ngày: 21/10/2021 - Đã có 1950 lượt xem bài viết này!
Sự khác biệt giữa ASP.NET MVC và ASP.NET WebForms là gì?
Một số lập trình viên hét lên rằng ASP.NET MVC là một bước lùi và rằng chúng ta đã quay trở lại những ngày ASP Classic một lần nữa, nhưng trong mắt tôi, đó là một bước đi hoàn toàn đúng đắn của Microsoft. Nó giúp cho quá trình phát triển web trở nên tự nhiên hơn.

Sự khác biệt giữa ASP.NET MVC và ASP.NET WebForms là gì?

Trước khi có ASP.NET, tôi đã sử dụng ASP Classic và sử dụng Delphi 2/3 để build các thư viện liên kết động ISAPI, hay các file DLL. 

Sau đó, sự xuất hiện của ASP.NET vào năm 2002 đã thay đổi diện mạo cách thức phát triển web. C# là hoàn toàn mới, các lập trình viên Visual Basic bắt đầu quá trình chuyển đổi từ Visual Basic sang VB.NET và trải nghiệm phong cách phát triển web mới. Đó là khi Web Forms được giới thiệu cùng với ASP.NET.

Kể từ ngày đó, tôi vẫn gặp nhiều vấn đề với Web Forms. Tôi luôn luôn phải kiểm tra để chắc chắn rằng đã thêm vào IsPostBack là dòng đầu tiên trong sự kiện Page_Load của mình, phải hiểu biết để giữ cho biến ViewState không có kích thước quá lớn, giảm thiểu dung lượng cho phía client bằng cách không sử dụng quá nhiều các web controls, v.v…

Tôi không cảm thấy tự nhiên đối với quy trình phát triển web bằng công nghệ của Microsoft vào lúc đó. Khoảng 5 năm sau đó (năm 2007), ASP.NET MVC CTP đã được giới thiệu. Một lần nữa, cách thức phát triển ứng dụng web trên công nghệ Microsoft lại thay đổi. Không những thay đổi, mà nó còn tạo ra một chuẩn mới trong việc phát triển web.

Một số lập trình viên hét lên rằng ASP.NET MVC là một bước lùi và rằng chúng ta đã quay trở lại những ngày ASP Classic một lần nữa, nhưng trong mắt tôi, đó là một bước đi hoàn toàn đúng đắn của Microsoft. Nó giúp cho quá trình phát triển web trở nên tự nhiên hơn.

Đối với một lập trình viên mới tiếp cận công nghệ Microsoft, tôi sẽ khuyên nên sử dụng ASP.NET MVC. Nhưng kể từ năm 2002, đã có hàng ngàn, nếu không muốn nói là hàng triệu, các ứng dụng Web Form được tạo ra. Bởi vậy chúng ta cũng phải quan tâm đến phần "di sản" này.

Thuật ngữ

Trước khi nói về sự khác biệt giữa WebForms và MVC, chúng ta cần phải biết sự khác nhau giữa các công nghệ của Microsoft. Trước đây, tôi đã nghe một vài lập trình viên bị nhầm lẫn giữa những công nghệ này.

  • .NET Framework - Một công nghệ được giới thiệu vào năm 2002, bao gồm khả năng tạo ra các file thực thi, các ứng dụng web, và các service sử dụng C#, Visual Basic, và F# (xem thêm wikipedia).
  • ASP.NET - Một server-side web application framework mã nguồn mở, là một tập con của .NET Framework tập trung cụ thể vào việc xây dựng ứng dụng web, các trang web và web services.
  • ASP.NET Web Forms - (2002 - đến nay)  Một kỹ thuật độc quyền được phát triển bởi Microsoft để quản lý state và form data trên nhiều trang. Bản chất của các trang web là stateless nhưng Microsoft đã chuyển thành các trang stateful bằng cách tạo ra kỹ thuật Web Forms.
  • ASP.NET MVC - (2008 - đến nay) Một web application framework mã nguồn mở tuân theo design pattern Model-View-Controller.

Sau khi đã phân biệt các công nghệ này một cách rõ ràng, chúng ta hãy cùng điểm qua những khác biệt giữa ASP.NET Web Forms và MVC nhé!

Sự khác nhau giữa ASP.NET Web Forms và ASP.NET MVC


Mặc dù các công nghệ này đã có tuổi đời trên 5 năm, nhưng chúng đều có những điểm thuận lợi và bất lợi của nó. 

Web Forms có ViewState , MVC thì không

Như tôi đã đề cập ở trên, ViewState là một cơ chế quản lý trạng thái cấp trang. Nếu bạn có nhiều server-side web control trên một trang, ViewState của bạn sẽ trở nên cực kỳ lớn. Phần mã HTML trả về cho client nên nhỏ nhất có thể, bởi vậy không nên có kích thước biến ViewState lớn.

MVC không có một ViewState. Nó sử dụng model/ViewModels để chuyển dữ liệu qua lại giữa các Views.

Web Forms có một Code-Behind Model, MVC chỉ có các model

Code-Behind là một cách để đính kèm code C# hoặc VB với một trang web và hoạt động dựa trên những hành động cụ thể khi chúng xuất hiện trên trang. Khi bạn biên dịch một Web Form có chứa code-behind, nó trở thành một phần của assembly (hay DLL) để tạo ra chức năng của trang web đó.

Web Forms có các Web Control, MVC không có

Có rất nhiều lập trình viên đã phàn nàn rằng MVC không có bất kỳ server-side control nào cả. Điều này là bởi vì họ đã quen thuộc với cách Web Forms làm việc trên một trang. Các control luôn có sẵn cho họ sử dụng. Cuối cùng, họ bắt đầu xây dựng các custom server control của riêng mình.

Trong khi Web Forms có một số lượng lớn các server control, thì MVC lại có một cách tiếp cận khác. Sau một thời gian phát triển, các lập trình viên bắt đầu hiểu rõ mô hình MVC và đòn bẩy bởi JavaScript, nơi họ có thể xây dựng các custom control riêng của họ hoặc thậm chí sử dụng một thư viện của bên thứ ba như Bootstrap cho giao diện người dùng.

Web Forms có các thành phần State-aware, MVC sử dụng hướng tiếp cận template

Đây là lý do tại sao rất khó để chuyển đổi một ứng dụng Web Forms sang một ứng dụng MVC.

Trong Web Forms, các lập trình viên đặt các control lên một trang web và có thể thao tác với những control này trên máy chủ trong code-behind. Các server-side control thậm chí còn giữ được trạng thái của chúng khi ViewState được bật (turned on).

Với MVC, bạn không làm việc với các controls, dữ liệu được xử lý rồi hiển thị lên View. Cú pháp Razor trong một View là cực kỳ mạnh mẽ.

Web Forms không có sự tách biệt các mối quan tâm (separation of concerns), MVC thì ngược lại!

Đã rất nhiều lần tôi nhìn thấy các lập trình viên tạo ra một Web Form, kéo thả control và viết code xử lý sự kiện cho control đó. Và khi viết như vậy thì logic nghiệp vụ đó sẽ không thể sử dụng lại được cho một ứng dụng khác.

Triết lý của MVC với logic nghiệp vụ là "Thin Controllers, Fat Models", có nghĩa là các model sẽ chứa tất cả các logic nghiệp vụ của bạn trong khi các controller chuyển kết quả dữ liệu từ model tới view.

Web Forms và MVC đều có thể sử dụng Session, nhưng tôi khuyên bạn đừng nên sử dụng

Cũng giống như ViewState, Session cũng có nhiều mặt nhược điểm của nó. Trong MVC, có một số cách truyền dữ liệu qua lại giữa các View mà không cần phải sử dụng đến session. 

Web Forms có IsPostBack, MVC có GET và POST

Các lập trình viên Web Form mới vào nghề đôi khi thường quên thêm một dòng lệnh "if( IsPostBack) return;" ở sự kiện Page_Load trong các trang web. Điều này có vẻ lạ đối với một số lập trình viên web kỳ cựu đến từ PHP hoặc ngôn ngữ web khác.

Toàn bộ ý tưởng của Web Forms là khi bạn đang request một trang, nó được coi là một GET (truy cập vào trang lần đầu tiên) và trang được khởi tạo. Khi bạn submit một form, thì Page_Load sẽ phát hiện ra rằng đó là một Postback và sự kiện Page_Load sẽ không được thực thi.

MVC có các chuẩn HTTP Protocol thông qua các lệnh GET, POST, DELETE, và redirect. Khi bạn bấm vào một nút submit, form (và dữ liệu) sẽ được gửi tới controller và controller sẽ xử lý nó.

Một lần nữa, cách mà MVC xử lý là tự nhiên hơn so với Web Forms.

Web Forms không dễ để sử dụng unit-test, MVC được xây dựng hỗ trợ test

Các lập trình viên web form thường gặp phải một vấn đề. Trừ khi các business object của họ được viết cẩn thận, còn nếu không sẽ rất khó viết unit-test.

Với MVC, bạn có thể xây dựng test đối với các controller, routes, action results... 

Web Forms có một thẻ Form lớn, MVC có thể có nhiều thẻ form trên một trang

Web Forms chỉ cho phép có một thẻ form duy nhất ôm lấy tất cả nội dung trang. Còn MVC cho phép bạn có nhiều thẻ form trên một trang.

Kết luận

Sau khi đã trải nghiệm cả 2 công nghệ trong một khoảng thời gian 10 năm, tôi rất biết ơn vì sự xuất hiện kịp thời của ASP.NET MVC. Tôi ngay lập tức chộp lấy nó và trải nghiệm một cách phát triển web tuyệt vời hơn.

Như tôi đã nói ở trên, nó mang lại cảm giác tự nhiên hơn với các lệnh.POST, GET, DELETE, Redirect. Và với phiên bản ASP.NET MVC 6 thì công việc phát triển web của bạn sẽ trở nên dễ dàng và linh hoạt hơn bao giờ hết.

Liệu tôi có bỏ sót một điều gì đó về sự khác biệt giữa Web Forms và MVC? Hãy để lại ý kiến của bạn trong phần bình luận phía dưới nhé!
 

BTV.Trần Thị Thu Huyền
Phòng Truyền Thông IMicroSoft Việt Nam
Hotline: 0916 878 224
Email: huyenttt@imicrosoft.edu.vn

Xem khóa đào tạo nhân sự theo danh mục!

Xem các khóa đào tạo nhân sự