Sự khác biệt giữa ASP.NET Web Forms và ASP.NET MVC?

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ư: Sự khác nhau giữa ASP.NET MVC và ASP.NET WebForms là gì? Hay ASP.NET MVC có thể sẽ thay thế ASP.NET WebForms trong thời gian tới không? Trong bài viết này sẽ giúp các bạn có cái nhìn đúng hơn về 2 mô hình này.

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.

hoc-lap-trinh-asp-net-2

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

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.

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.

Nhận xét