[Series C#] TRÁNH XA WEB FORM, CÀNG XA CÀNG TỐT

9/16/2020 3:11 PM | Lập trình

Lâu lâu lang thang trên mấy forum và group lập trình,  thấy nhiều bạn vẫn hay có thắc mắc về WebForm. Thôi thì trước đây mình đã từng bình luận về WinForm và Silverlight rồi, hôm nay bình về WebForm luôn cho đủ bộ vậy. Bài viết sẽ cho bạn lý do để… từ bỏ WebForm và dành thời gian đi học cái khác có ích hơn. Lưu ý: bài viết là quan điểm cá nhân của tác giả. Mọi tranh luận về technical và góp ý về cách viết đều được hoan nghênh.

WebForm, em là ai? Em ở hành tinh nào xuống?

Trước khi nói lý do nên tránh xa WebForm, hãy nghe mình kể về quãng đời lên voi xuống chó đầy thăng trầm của bé WebForm.

Ngày xửa ngày xưa, khi hầu hết đối tượng sử dụng phần mềm là các doanh nghiệp, các bác developer suốt ngày chỉ ngồi code Enterprise Application (ứng dụng doanh nghiệp) cho nội bộ công ty bằng WinForm và VB6.

Thế rồi một ngày nọ, Internet ra đời. Thay vì chỉ làm ứng dụng nội bộ, nay các bác lãnh đạo còn đòi hỏi phải đưa sản phẩm lên web. Khổ nỗi, công ty trước giờ chỉ có 1 đống developer chuyên làm WinForm. Để viết ứng dụng web phải đào tạo lại về HTML/CSS/JS và back-end, rất tốn thời gian và công sức.

Thế là Microsoft tạo ra WebForm. Chẳng cần học HTML/CSS hay JavaScript gì, dân dev chỉ việc áp dụng một số kiến thức sẵn có về WinForm, kéo thả control là có thể tạo ra ứng dụng web, quá tiện phải không nào!.

Web Form nhanh chóng được mọi công ty ưa thích. Với sự ra đời của 1 số user control do KendoUI, DevExpress, việc kéo thả, thiết kế ứng dụng web trở nên tiện lợi và nhanh chóng.

Tiếc thay,  vật đổi sao dời, cũng như  Internet Explorer, đời WebForm cũng trải qua bao thương hải tang điền. Em phải chia tay người yêu soái ca, bán mình vào lầu xanh, sau khi được đại gia chuộc ra thì bị vợ đại gia đánh ghen, … nhầm, đang review truyện Kiều nên viết lộn vào luôn. Hơn một năm trước, WebForm cũng bị chính cha nó khai cmn tử:

Buried in the announcement was this little nugget:
Your existing Web Forms apps will continue to run without modification on IIS with .NET 4.6. You can’t use Web Forms apps with the cloud-optimized runtime.

Do my eyes deceive me? Because that looks like WebForms will not be supported in .NET 5. But that can't be right! Microsoft has made such a big deal about supporting both MVC and WebForms in the past.

But it appears that this is the case. WebForms will only be supported in .NET 4.6 and below. To which I can only say: Finally!

Vì sao WebForm lại chết, ẻm đã làm gì sai?? Vì sao mình lại dặn phải tránh xa Web Form, xin mời các bạn đọc tiếp ở phần 2, nhầm,… phía dưới.

Điểm yếu của WebForm

Dưới đây là một số lý do mà WebForm bị người đời chửi hơn chửi chó (Để tìm hiểu thêm, các bạn có thể google “Why Web Form sucks”).

  • View State của WebForm thường khá lớn, đôi khi lên đến cả MB (chứa thông tin về toàn bộ các field của form), làm việc gửi nhận dữ liệu trở nên nặng nề.
  • Không quản lý được ID của các element được tạo ra nên khó tích hợp với jQuery (Các bản WebForm mới đã khắc phục lỗi này).
  • Page Cycle phức tạp khó hiểu với 7 step và gần 10 event.
  • Một số control hỗ trợ viết code nhanh dẫn đến code ẩu (Ví dụ như cho phép kết nối tới Database trực tiếp từ view).
  • Không thể áp dụng DI, không viết được unit test.

Tuy nhiên, đây chỉ là điếm yếu (điểm yếu thì ngôn ngữ/framework nào cũng có) chứ không phải là lý do mình khuyên không nên học WebForm.

Lý do nên tránh xa webform

Lý do mình khuyên các bạn nên bỏ WebForm không phải là vì em từng vào lầu xanh nên bị HIV, mà là: WebForm hiện tại rất ít được dùng, và kiến thức thu được từ WebForm rất vô dụng.

WebForm là một thằng ml ba xạo, nó dùng khái niệm user control để che giấu sự thật về web: Bản chất Web *éo phải là Form và Control, Web là HTML/CSS/JS. Nó tạo cho bạn 1 cảm giác : Làm Web cũng đơn giản như form, chỉ việc kéo thả rồi viết code cho các event là xong.

Ban đầu với những chức năng đơn giản hoặc có code sẵn thì WebForm hoạt động khá tốt, nhưng khi cần đụng tới tương tác phức tạp với JavaScript, AJAX, RestAPI, WebForm dần lộ ra những nhược điểm của mình.

Mặt khác, hầu hết các framework về Web đều phân chia rõ ràng hai bộ phận là front-end và back-end. Nếu đã học ASP.NET MVC, hiểu về model, controller, bạn có thể dễ dàng chuyển qua Ruby on Rail, Struts, Django, Express, hoặc áp dụng kiến thức MVC vào các framework front-end như AngularJS. Hiểu rõ khái niệm front end/back end bạn sẽ viết được RestAPI, viết Single Page Application.

Tuy nhiên, nếu học WebForm, bạn sẽ phải học lại từ đầu khi chuyển qua các framework khác như MVC, Struts,… vì chả thằng nào dùng chung các khái niệm server control, page cycle, … của WebForm cả. Đấy, chẳng phải vô dụng là gì!!!

Kết luận

Thời xưa mình học FPT cũng từng được dạy Web Form. Tuy chẳng biết viết HTML CSS nhưng mà kéo thả cũng ra một cái web rất nhanh và ảo. Hậu quả là sao khi học mình chả biết gì về HTML và CSS cả =)).

Mình cũng biết WebForm là một công nghệ hay, hữu dụng, nhưng thật sự nó không có ích cho con đường phát triển lâu dài của bạn.

Bài này được viết để cảnh báo những người đã, đang hoặc sắp học WebForm. Nhớ cẩn thận, đừng đầu tư quá nhiều thời gian công sức cho nó nhé!!

Tác giả: Phạm Huy Hoàng

Tin tức khác

  • Tạo chatbot với CHAT GPT sử dụng C#

    Tạo chatbot với CHAT GPT sử dụng C#

    Trong hướng dẫn này, chúng ta sẽ đi sâu vào quá trình xây dựng chatbot bằng ChatGPT và C#. Chúng tôi sẽ đề cập đến mọi thứ, từ thiết lập quyền truy cập API ChatGPT đến triển khai chatbot của bạn. Bắt đầu nào!

  • Remote SQL Server. Cách mở port 1433 để kết nối với sqlserver từ xa.

    Remote SQL Server. Cách mở port 1433 để kết nối với sqlserver từ xa.

    Hiện nay nhiều người có xây dựng cơ sở dữ liệu trên server và kết nối tới để làm việc cho tiện. Nên mình chia sẻ bài viết này cho người mới nhé.

  • Sự khác nhau giữa Application, Virtual Direction và Site. Cách tạo 1 Virtual Direction.

    Sự khác nhau giữa Application, Virtual Direction và Site. Cách tạo 1 Virtual Direction.

    Trong IIS, bạn có thể tạo các trang web, ứng dụng và thư mục ảo để chia sẻ thông tin với người dùng qua Internet, mạng nội bộ hoặc mạng phụ. Mặc dù các khái niệm này đã tồn tại trong các phiên bản trước của IIS, một số thay đổi trong IIS 7 trở lên ảnh hưởng đến định nghĩa và chức năng của các khái niệm này. Quan trọng nhất, các trang web, ứng dụng và thư mục ảo giờ đây hoạt động cùng nhau theo mối quan hệ phân cấp như những khối xây dựng cơ bản để lưu trữ nội dung trực tuyến và cung cấp dịch vụ trực tuyến.

  • Design pattern là gì? Tại sao nên sử dụng Design pattern?

    Design pattern là gì? Tại sao nên sử dụng Design pattern?

    Design pattern là các giải pháp tổng thể đã được tối ưu hóa, được tái sử dụng cho các vấn đề phổ biến trong thiết kế phần mềm mà chúng ta thường gặp phải hàng ngày. Đây là tập các giải pháp đã được suy nghĩ, đã giải quyết trong tình huống cụ thể.

  • CDN là gì? Khi nào thì cần xài CDN cho website

    CDN là gì? Khi nào thì cần xài CDN cho website

    Thuật ngữ CDN có thể bạn sẽ bắt gặp khá nhiều bài viết trên thachpham.com, hoặc khi bạn cần một người có kinh nghiệm tư vấn giải pháp tiết kiệm băng thông máy chủ và tăng tốc độ website đều sẽ được nghe tư vấn là sử dụng CDN. Vậy CDN chính xác là cái gì, có bao nhiêu loại CDN, và website của bạn có thích hợp để sử dụng CDN không thì bài này sẽ cung cấp cho bạn các thông tin cần thiết đó.

  • Giao thức HTTP và HTTPS là gì? Tại sao nên sử dụng HTTPS?

    Giao thức HTTP và HTTPS là gì? Tại sao nên sử dụng HTTPS?

    Môi trường internet phát triển, kéo theo tội phạm mạng tăng cao, vì thế cần có những chuẩn bảo mật web cao hơn. Đó là lí do giao thức HTTPS dần thay thế hoàn toàn HTTP. Vậy, giao thức HTTPS là gì? HTTP và HTTPS khác nhau như thế nào? Và tại sao các website nên dùng HTTPS thay vì HTTP? Bài viết này sẽ giúp bạn giải đáp tất cả những thắc mắc đó.

  • Tích hợp zalo vào website.

    Tích hợp zalo vào website.

    Nếu bạn là một người có website bán hàng thì việc liên hệ thuận lợi nhanh cho khách hàng luôn là ưu tiên hàng đầu. Cũng chính vì lí dó này mình đã tìm hiểu sau khi chèn cho website của mình. Thấy hay nên chia sẻ cho mọi người có nhu cầu.