Series C# hay ho: Tránh xa Web Form, CÀNG XA CÀNG TỐT

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ề WinFormSilverlight 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.

ASPNETlogo

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/JSback-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.

kendo

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.

1 (1)

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.

1

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.

1413830260-interview-questions

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é!!

Đưa con số xác thực kẻo các bác lại bảo là chém gió =)))

12

 

 

Advertisements

24 thoughts on “Series C# hay ho: Tránh xa Web Form, CÀNG XA CÀNG TỐT”

  1. WebForm cực kỳ hữu dụng đối với những bài toán:
    – Nghiệp vụ phức tạp
    – Hệ thống nội bộ
    – Chi phí thấp, thời gian ngắn

    Theo mình các bạn nên học WebForm, vẫn rất hữu dụng, không nhất thiết lúc nào cũng phải dùng dao mổ trâu để giết gà

    Like

  2. Học webform nên dùng HTML và CSS để thiết kế giao diện đừng nên lạm dụng công cụ có sẳn mà kéo thả vào.Việt tự code sẽ giúp ích cho việc học HTML và CSS.

    Like

  3. anh ơi, giờ em đang là sinh viên k12 của FPT , anh có thể chia sẻ chương trình học KTMP của FPT gồm những ngôn ngữ lập trình nào được không?
    anh có lời khuyên nào cho sv k12 như em khi bước chân vào FPT ? em muốn tận dụng thời gian và tiền bạc khi đầu tư vào đây, em cũng đang học qua những ngôn ngữ lập trình như html,css,php, javascript, jquey..
    mong anh giúp đỡ 🙂

    Like

    1. Hình như có dạy C, C++, Java, C#. Ngôn ngữ chỉ là syntax thôi, quan trọng là tư duy lập trình em à ;).
      Với lại ngành mình cũng nên tự học nhiều chứ đừng quá trông chời vào nhà trường 😉

      Like

    1. Quan trọng là năng lực của bạn thôi. Tuyển dụng .NET đâu có ít, mà kể cả có ít hơn những ngôn ngữ và công nghệ khác đi nữa thì bạn nhảy sang cái khác chắc gì đã bằng người ta. Bạn nên nhớ một nghề cho chín còn hơn chín nghề. .NET hay Java hay PHP, chỉ cần bạn làm tốt 1 cái thôi là không lo chết đói 🙂

      Liked by 1 person

  4. thật ra thì đọc bài này em cũng k hiểu gì đâu vì 1 chữ code bẻ đôi em cũng k biết, em chỉ muốn nói là công ty em đang cần tuyển ASP.net webform, tầm 6 tháng tới 1 năm kinh nghiệm thôi ạ. Chi tiết xin liên hệ email tuyendung@tatthanh.com.vn

    Like

  5. không biết gì về webform thì đừng có phán
    WebForm là mô hình lập trình rất hiện đại, đơn giản, rỏ ràng, linh động, hoạt động độc lập, không còn trộn code… Là một trong những công nghệ độc đáo của Microsoft dưới thời Bill Gates, nhưng gần đây nó dần bị lãng quên thật đáng tiếc.
    Do đâu mà nó dần bị lãng quên?
    Nói chung công nghệ nào cũng có điểm mạnh và yếu, WebForm cũng không ngoại lệ. WebForm dựng sẵn (built in) cho người lập trình rất nhiều thứ (như: Master Page, Server Controls, ViewState, PostBack…), nhưng những cái này quá cứng nhắc, thiếu linh động, quá vô dụng, quá vô duyên, tự động phát sinh mã lung tung khó kiểm soát, không áp dụng được thực tế… nên đã làm nản lòng nhiều developer. Đây là cũng là điểm mà nhiều công nghệ khác muốn “dìm hàng” xoáy vào và cũng là điểm mà nhiều mạng xã hội tranh cãi nảy lửa. Ngay từ đầu bước vào Webform cách đây hơn 10 năm, tuy chưa học qua lớp lập trình WebForm nào, chưa có bất kỳ tài liệu nào viết nhưng mình cũng nhận ra điểm yếu này và loại bỏ không sử dụng nó ngay từ đầu. Và nếu theo mô hình WebForm thì không cần sử dụng và quan tâm đến mấy cái đó.
    Trong mô hình ASP.NET MVC thay thế “Master Page” -> “Layout”, “Server Controls” -> “HTML helper” cũng chẳng khá hơn. Thực sự thì những control như asp:TextBox ở WebForm hay Html.TextBox ở MVC đều vô dụng như nhau.
    Vậy đâu là cái hiện đại, chuyên nghiệp và đáng giá trong WebForm?
    1./ WebForm được sự hỗ trợ của bộ thư viện ASP.NET cực kỳ mạnh mẽ là điều được mọi người công nhận. Ở ASP.NET MVC cũng được hỗ trợ từ bộ thư viện này.
    2./ WebForm hỗ trợ Custom Control (User Control) cực kỳ mạnh mẽ, đây được xem như ánh sáng cuối đường hầm cho mô hình này.
    Không giống như Custom Control của nhiều mô hình lập trình hay ngôn ngữ lập trình khác. WebForm Custom Control hỗ trợ 2 cách gọi tĩnh và động với nhiều loại tham số (từ base types đến các template) giúp nó rất linh động, có khả năng tuỳ biến cao và hoạt động độc lập. Chúng ta chủ động mã HTML chứ không còn chuyện tự động phát sinh mã HTML lộn xộn và khó kiểm soát như các Built-in Server Control.
    Chúng ta có thể dùng cách gọi tĩnh để dùng Custom Control như một “Layout” hay “View” rất rỏ ràng và chuyên nghiệp như ví dụ sau:
    a./ Layout

    /body>

    b./ View:

    Hoặc:

    Hoặc:

    Với các tham số default template và custom template rất linh động và đầy đủ tính năng (xem danh sách, xem chi tiết, thêm, sửa, xoá, duyệt, copy, tìm kiếm, in ấn…) một cách tự động và chủ động mà không cần code gì thêm.
    Như vậy, chúng ta chỉ cần làm duy nhất 1 control với không quá 300 dòng code là có thể xây dựng được 1 web tin tức nhanh chóng và chuyên nghiệp, đặt ở đâu cũng chạy, ở dự án nào cũng được, không cần phải sửa code hay rebuild, khả năng phát sinh lỗi cũng rất thấp nên giảm công test rất nhiều và rất dễ nâng cấp bảo trì…
    Cũng tương tự như trên, chỉ cần 3 control là hoàn thành trên 30% tất cả các dự án, từ web tin tức, web thương mại điện tử hay web quản lý ERP.
    Và chúng còn cung cấp 2 lệnh gọi động LoadControl và LoadTemplate giúp ta điều khiển rất linh hoạt. Tuỳ theo mỗi Context ta có thể chủ động load Layout nào, View nào cho phù hợp với từng Context chứ không cần đến coder khai báo.
    3./ WebForm là mô hình lập trình không trộn code, đây là điểm khác biệt và mạnh nhất của mô hình này. Các mã nguồn HTML, C#, CSS, Javascript, SQL… hoàn toàn độc lập và nằm trên các file khác nhau nên rất rỏ ràng, ít phát sinh lỗi, dễ tái sử dụng và dễ nâng cấp bảo trì.
    Chính điều này giúp chúng ta dễ dàng phát triển độc lập các loại mã nguồn trên một cách chuyên nghiệp (tức là khi xây dựng hay nâng cấp C# không ảnh hưởng đến Database và ngược lại, analyst có thể thiết kế databse tuỳ ý mà không ảnh hưởng đến coder, cũng như việc thay đổi mã HTML cũng không ảnh hưởng đến các mã khác).
    Thực sự không hiểu sao trong mô hình MVC lại quay về mô hình trộn code như ASP Classic. Trong mã file View (HTML) đầy rẩy mã C# rất lộn xộn, trong mã C# thì tùm lum câu lệnh SQL (LINQ) rất cứng nhắc và khó kiểm soát.
    4./ WebForm là mô hình tự chủ nên rất linh động. Không giống các mô hình lập trình khác theo cơ chế Bao cấp (cấp phát) hay Xin cho (request response) rất cứng nhắc. Mô hình WebForm hoàn toàn tự chủ về tài nguyên và hoạt động nên rất linh động nhưng không mất kiểm soát.
    5./ Tốc độ xử lý nhanh, ít sử dụng tài nguyên, bảo mật cao và url thân thiện. Thực chất, mấy cái này phụ thuộc vào developer đến 99%, chứ không phải là công nghệ. Ở WebForm cũng có thể xây dựng web rất nhanh (response time < 10ms), sử dụng tài nguyên rất thấp (RAM < 30MB, CPU < 5%, HDD < 30MB…), độ bảo mật cao và url rất thân thiện và linh động như các mô hình khác. Nút thắt cổ chai là DB chứ thời gian render của code rất thấp (< 2ms), nên không đáng để bàn đến như nhiều mạng xã hội tranh luận.
    Nói chung, mỗi công nghệ, mỗi mô hình đều có điểm yếu và mạnh riêng. Chúng ta đừng nên “dìm hàng” và đừng vội đánh giá khi chỉ mới nắm lý thuyết. Giữa lý thuyết với thực tế có một khoảng cách rất xa. Các nhà báo amatuer về công nghệ đừng nên đánh giá linh tinh để giết chết những công nghệ rất hiện đại.

    Liked by 1 person

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s