10/10/2018, 13:27
So sánh giữa ASP.NET Web Form và MVC.NET MVC
Link Anh: http://msdn.microsoft.com/en-us/magazine/dd942833.aspx
Link Việt:
1. http://www.facebook.com/note.php?note_id=96039204213
2. http://tumivn.com/post/2011/11/15/To...SPNET-MVC.aspx
Bình luận:
Có lẽ khá ít bạn biết là ASP có đến ... 3 loại
1 là ASP, hay còn gọi là ASP Classic, đây là loại cổ điển nhất của ASP. thời tôi còn dạy Aptech (2008-2010) thì Aprotrain Aptech và FPT Aptech vẫn còn dạy cái thể loại này, giờ không biết đã bỏ chưa. Cách code ngôn ngữ ASP này khá giống với code PHP, tiếc là trong khi PHP có rất nhiều Framework và phát triển rất mạnh thì ngôn ngữ này không có 1 Framework chính thống nào, không còn được Microsoft hỗ trợ và đang trên con đường lụi tàn. Trước đây, một số web lớn được code bằng ngôn ngữ này như vnexpress.net, sohoa ... lý do theo tôi nghĩ là họ đã mất công xây dựng một Framework khá mạnh của họ dựa trên ASP từ giai đoạn trước khi ASP.NET phát triển và việc chuyển đổi sang nền tảng khác đòi hỏi chi phí khá lớn, hiện nay nghe đồn là vnexpress chuyển sang dùng PHP.
2 là ASP.NET Framework, thường được gọi tắt là ASP.NET, đây là khung sườn được dạy ở đa số Đại Học, Trung Tâm (Aptech, NIIT) ... ở VN, chúng còn được biết đến với cái tên ASP.NET MVP (chữ P là viết tắt của Presentor) hoặc là ASP.NET WebForm (tên này phổ biến hơn). Đây là một sáng tạo của Microsoft nhằm thống nhất việc phát triển web và phần mềm, đáng tiếc là ý tưởng này có nhiều sai lầm (các bạn đọc mấy link ở trên sẽ rõ sai lầm thế nào).
3 là ASP.NET MVC Framework, hay gọi tắt là ASP.NET MVC (C là viết tắt của Controller) đây là cách mà Microsoft khắc phục sai lầm ở trên đã nói. Tiếc là ở VN rất ít nơi đào tạo cái này (tôi search thử thì ra rất ít, 2, 3 nơi gì đó, bạn nào biết thì chỉ giùm nhé).
Với những bạn không vào được Facebook, tôi copy bài viết ra cho đọc luôn:
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
Link Việt:
1. http://www.facebook.com/note.php?note_id=96039204213
2. http://tumivn.com/post/2011/11/15/To...SPNET-MVC.aspx
Bình luận:
Có lẽ khá ít bạn biết là ASP có đến ... 3 loại
1 là ASP, hay còn gọi là ASP Classic, đây là loại cổ điển nhất của ASP. thời tôi còn dạy Aptech (2008-2010) thì Aprotrain Aptech và FPT Aptech vẫn còn dạy cái thể loại này, giờ không biết đã bỏ chưa. Cách code ngôn ngữ ASP này khá giống với code PHP, tiếc là trong khi PHP có rất nhiều Framework và phát triển rất mạnh thì ngôn ngữ này không có 1 Framework chính thống nào, không còn được Microsoft hỗ trợ và đang trên con đường lụi tàn. Trước đây, một số web lớn được code bằng ngôn ngữ này như vnexpress.net, sohoa ... lý do theo tôi nghĩ là họ đã mất công xây dựng một Framework khá mạnh của họ dựa trên ASP từ giai đoạn trước khi ASP.NET phát triển và việc chuyển đổi sang nền tảng khác đòi hỏi chi phí khá lớn, hiện nay nghe đồn là vnexpress chuyển sang dùng PHP.
2 là ASP.NET Framework, thường được gọi tắt là ASP.NET, đây là khung sườn được dạy ở đa số Đại Học, Trung Tâm (Aptech, NIIT) ... ở VN, chúng còn được biết đến với cái tên ASP.NET MVP (chữ P là viết tắt của Presentor) hoặc là ASP.NET WebForm (tên này phổ biến hơn). Đây là một sáng tạo của Microsoft nhằm thống nhất việc phát triển web và phần mềm, đáng tiếc là ý tưởng này có nhiều sai lầm (các bạn đọc mấy link ở trên sẽ rõ sai lầm thế nào).
3 là ASP.NET MVC Framework, hay gọi tắt là ASP.NET MVC (C là viết tắt của Controller) đây là cách mà Microsoft khắc phục sai lầm ở trên đã nói. Tiếc là ở VN rất ít nơi đào tạo cái này (tôi search thử thì ra rất ít, 2, 3 nơi gì đó, bạn nào biết thì chỉ giùm nhé).
Với những bạn không vào được Facebook, tôi copy bài viết ra cho đọc luôn:
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
Bài liên quan
Thử một điều đơn giản ví như làm cái wall như facebook mà làm với web form thì có mà bị hâm nặng. Tất nhiên là làm được nhưng chỉ làm khổ mình thôi.
Có điều phải cũng phải thừa nhận là đa phần web ASP.NET code clientside sinh ra rất tệ hại, nói về đa số thôi.
Nói về Control thì ASP.NET có rất nhiều công cy lớn viết các Control cho giá cũng rất chát, nhưng đó là những thứ rất tuyệt vời nếu bạn làm chủ được nó và phải xem khả năng code của chúng ta nữa. Không phải kéo thả mà ra một website.
Mình vẫn thích code ASP.NET/ ASP.NET MVC:
1. Do mình chuyên Windows: nên lập trình và quản trị dễ dàng hơn.
2. Site mình liên kết với ứng dụng trên Windows, nên chọn MSSQL làm CSDL
3. Phần mềm hỗ trợ mạnh (VS2010, VS2012)
4. Control DevExpress mạnh mẽ
5. Dễ dàng xây dựng một thư viện, control riêng cho mình
6. Khả năng Debug mạnh
@Mình không chê PHP vì không rành nó, chỉ nói lên những gì mình thích ở ASP.NET