Trong bài báo số tháng 7 của MSDN, Dino Esposito so sánh nhiều mặt khác nhau giữa lập trình web dùng Web Form và MVC.
Tôi (tức là bạn Cường, tác giả bài viết) xin một viết một bài có tiêu đề tương tự, phần nội dung một số đoạn tham khảo từ bài viết của Dino, phần lớn còn lại từ kinh nghiệm lập trình thực tế với ASP.net Web Form 2.0 và ASP.net MVC 3.5.
Dino viết “Dựa trên server controls, ASP.net cho xây dựng ứng dụng web mà chỉ cần tối thiểu kỹ năng về HTML và JavaScript. Ưu điểm của ASP.net đó là năng suất cao có được nhờ control, thư viện mạnh tích hợp lúc chạy cũng như cung cấp công cụ lập trình với số lượng phong phú server control, user control, postback, viewstate, form authentication và những control cơ bản. Mô hình WebForm của ASP.net rõ ràng là thừa kế mô hình Windows Form và sâu hơn nữa là tư tưởng Visual Basic Rapid Application Development.”
Liệt kê các ưu điểm của ASP.net Web Form (Cường bổ sung thêm một số ý):
1- Thiết kể bằng kéo thả, không phải viết code HTML nhiều. Bạn nào dùng Grid View, List View sẽ thấy.
2- Độ ổn định cao, được Microsoft liên tục phát triển từ năm 2000 đến nay. Trang vnexpress.net, online news số 1 ở VN được xây dựng từ ASP rồi chuyển lên ASP.net. Giao diện đơn giản, thân thiện, có số lượng độc giả rất lớn. Trang DanTri.com.vn cũng là một ví dụ tốt.
3- Mô hình cơ bản của ASP.net Web Form đó là event driven. Ví dụ sự kiện Click của Button sẽ được sinh mã xử lý sự kiện ở trang Code Behind. Để làm được việc này cơ chế PostBack, ViewState được sử dụng để biến trang web vốn bản chất là stateless, không lưu trạng thái, trở thành có trạng thái, stateful như ứng dụng Desktop client.
4- ASP.net Web Form có xu hướng đóng gói (componentization) tất cả những gì được coi là tốt, cần tận dụng lại trong lập trình ASP.net như tự động điền dữ liệu vào trường khi trang load lại, xử lý xác thực và phân quyền ngày trước khi trang load lại, Web Control, User Control, Web Part…. Công nghệ đóng gói các control dùng lại đã tạo nên thị trường hết sức sôi động cho các hãng phần mềm thứ ba sáng tạo mới những control để thương mại, ví dụ như Telerik, ComponentOne, DevExpress,…. Người được hưởng lợi chính là những lập trình viên web. Họ chỉ cần tập trung vào tầng CSDL, xử lý logic và lập trình hứng các sự kiện. Năng suất, khả năng phát triển nhanh ứng dụng web hướng dữ liệu đó chính là lợi điểm của ASP.net
Đâu là nhược điểm của ASP.net Web Form?
Tính chất Separate of Concern là một tiêu chí để đánh giá một ứng dụng có dễ phát triển, dễ bảo trì, dễ kiểm thử…. Tách bạch sự quan tâm, ở đây hiểu là từng bộ phận của chương trình có thể tách ra để kiểm tra. Thực tế cho thấy máy tính có cấu tạo phức tạp hơn một chiếc Tivi rất nhiều, tuy nhiên do thiết kế module – interface, mà chúng ta dễ dàng kiểm tra, phát hiện pan của máy tính do bộ phận nào gây nên hơn Tivi. Hơn nữa, máy tính dễ dàng nâng cấp, thay mới, còn Tivi thì gần như không thể trừ khi một thợ điện tử có kinh nghiệm lâu năm với một cái mỏ hàn để nhổ vi mạch cần thay thế.
Thêm một ví dụ nữa đó là HTML và CSS. HTML mô tả cấu trúc các thẻ, thành phần HTML. CSS định nghĩa định dạng, phong cách thể hiện của thành phần HTML. Tương XML và XSLT.
Do bản chất của Web Form đó là sự đóng gói cao. Trong một web control sẽ bao gồm cả phần sinh mã HTML, CSS, JavaScript, mã hứng sự kiện…. Rõ ràng tính đóng gói cao, chặt chẽ lại ảnh hưởng không nhỏ đến tiêu chí Separate of Concern. Điển hình là control SQLDataSource được kéo vào trang aspx thì cần có luôn các lệnh SQL như SELECT, INSERT, DELETE…. Tiện thì có tiện nhưng thấy kỳ kỳ, câu lệnh SQL nằm luôn ở trang aspx, nơi ưu tiên dành cho việc thiết kế giao diện. Phía hông cái Tivi nhà bạn lại hở ra những bảng mạch điện: tụ, điện trở, cuộn cảm, IC chạy loằng ngoằng.
Việc nhúng các thư viện JavaScript như jQuery, Dojo, MooTools vào WebForm không khó nhưng để tương tác với những web control thì lại rất phức tạp, rối rắm. Ví dụ trong một control, nếu có một hyperlink được hứng sự kiện ở phía code behind, thì có nghĩa mọi logic lập trình viên muốn can thiệp đều phải viết trong hàm sự kiện này. Hệ quả là hầu hết các tương tác trên form đều phải submit lên máy chủ để hứng sự kiện. Microsoft AJAX Control Toolkit, UpdatePanel ra đời, việc submit cả trang cũng giảm bớt, nhưng lập trình viên thạo JavaScript cũng không có cơ hội chọc ngoáy vào tương tác của từng control đơn giản bởi vì thay vì submit cả trang, giờ chỉ submit các thành phần trong UpdatePanel. Lại phát sinh nhu cầu, control A trong UpdatePanelX muốn tương tác với control B trong UpdatePanelY thì làm thế nào? Tất nhiên là làm được, nhưng phải dùng thêm nào là Trigger…. nói chung là khá rối
Bookmarks