Sự khác nhau giữa ASP.NET Web Forms và ASP.NET MVC
- Ngoc Huynh
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 ưu và khuyết điểm của nó
Web Forms có ViewState , MVC thì không
ViewState là một cơ chế quản lý trạng thái cấp trang (page-level). Nếu bạn có nhiều server-side web control (những tag đặc biệt của ASP.NET và được xử lý trên server) trên một trang, thì 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, trong khi 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 đó.
Với MVC, dữ liệu được xử lý rồi hiển thị lên View.
Web Forms có các Web Control, còn MVC thì 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 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.
Với MVC, bạn không làm việc với các control, 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, còn MVC thì ngược lại!
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 hỗ trợ test, còn MVC thì ngược lại
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ó để 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.
Nguồn bài viết : http://www.danylkoweb.com/