Tản mạn ASP.NET MVC

Vào đầu thế kỉ XXI, Internet dần trở nên phổ biến. Công nghệ lập trình web vào thời kì đó cũng đang được phát triển. Để thu hút lập trình viên Windows Forms chuyển sang dùng web, Microsoft tung ra phiên bản ASP.NET mới chạy trên nền tảng .NET thay thế cho ASP cổ điển (Classic ASP). Công nghệ này được gọi là ASP.NET Web Forms. Điểm thu hút chính của Web Forms là nó không bắt buộc lập trình viên phải thành thạo HTML, CSS hay JavaScript. Thay vào đó, họ có thể thao tác tương tự như khi thiết kế ứng dụng Windows Forms bằng cách kéo thả control từ Toolbox trong Visual Studio. Ở hậu trường, ASP.NET hì hục sản sinh HTML tự động. Điều này giúp lập trình viên không chuyên về web có thể nhảy vào lĩnh vực này mà không cần học thêm ngôn ngữ mới.

Với ASP.NET Web Forms, Microsoft cố che giấu những chi tiết phức tạp như HTTP và HTML bằng các server control. Mỗi control sẽ tự quản lý trạng thái (state) của mình thông qua cơ chế View State. Điều này diễn ra tự động mà không cần lập trình viên can thiệp. Web là môi trường phi trạng thái (stateless), mỗi request hoàn toàn độc lập với nhau. Nhưng nhờ ASP.NET Web Forms, Microsoft mang đến cảm giác quen thuộc như lập trình trong môi trường Windows Forms. Tuy vậy, View State cũng có điểm yếu. Vì được chèn vào HTML dưới dạng một input ẩn, nếu lập trình viên không cẩn thận khi dùng các control, họ có thể khiến View State phình to. Điều này ảnh hưởng không nhỏ đến hiệu suất của web, đặc biệt khi khối lượng View State khổng lồ được chuyển qua lại giữa client và server sau mỗi lần postback.

Ngoài View State, khi dùng ASP.NET Web Forms, lập trình viên buộc phải nắm vững vòng đời (life cycle) của một trang aspx. Nó bao gồm một loạt các sự kiện xảy ra theo trình tự nhất định. Nếu lập trình viên đặt code sai chỗ, như đặt code chỉnh sửa control sau khi nó đã được xuất ra HTML thì ứng dụng sẽ báo lỗi. Số lượng event này khá nhiều và cũng không dễ nhớ. Do ASP.NET Web Forms sinh HTML tự động nên rất dễ xảy ra tình trạng code thừa hoặc không đúng ý lập trình viên. Tệ hơn nữa, có khi server control lại sinh ra HTML không hợp với chuẩn hiện đại như chèn thuộc tính định kiểu vào thẻ HTML. Đây là một điều cấm kị trong lập trình web vì nó khiến việc bảo trì trở nên khó khăn.

Những nhược điểm trên của ASP.NET Web Forms có thể được khắc phục nhưng đòi hỏi lập trình viên phải làm thêm những thao tác phức tạp. Thông thường, những gì quá phức tạp thì chẳng ai chịu làm.

Thời gian trôi qua, công nghệ web ngày càng phát triển mạnh mẽ. Với sự ra đời của HTML5 và CSS3, ứng dụng web có thể thực hiện những chức năng đa phương tiện cao cấp chẳng thua kém gì ứng dụng desktop. Bên cạnh đó, vai trò của JavaScript cũng được nâng cao. Thay vì chỉ dùng nó để kiểm tra tính hợp lệ của dữ liệu người dùng nhập vào, JavaScript giờ đây nắm luôn cả phần xử lý logic của giao diện. Điều này mang đến những trải nghiệm tức thời mà không phải chờ đợi phản hồi từ server. Xu hướng ứng dụng một trang (Single-Page Application) đang dần trở nên phổ biến. Điều này chỉ có thể thực hiện được nhờ những thư viện JavaScript như Angular. Rõ ràng, tích hợp những công nghệ tiên tiến này vào trong ASP.NET Web Forms là một cực hình.

Do vậy, ASP.NET Web Forms dần dần mất đi ưu thế ban đầu. Trong khi đó, vào năm 2004, một nền tảng lập trình web dùng ngôn ngữ Ruby mang tên Ruby on Rails ra mắt với cách thức hoạt động hoàn toàn mới. Nó sử dụng mô hình thiết kế MVC (Model - View - Controller) để di chuyển dữ liệu qua lại giữa các thành phần trong ứng dụng web. Mô hình này tách riêng những thành phần mà trước đây dính chặt với nhau, dẫn đến tình trạng khó bảo trì và nâng cấp về sau. Trong mô hình MVC, Model mô tả dữ liệu cần xử lý. Controller tiếp nhận yêu cầu từ phía người dùng và cập nhật dữ liệu vào Model, rồi sau đó chuyển nó cho View. Tiếp theo, View hiển thị dữ liệu được đóng gói trong Model.

  • Model: Mô tả dữ liệu.
  • View: Hiển thị dữ liệu.
  • Controller: Gửi Model (chứa dữ liệu) cho View.

Thấy được sự ưu việt của mô hình MVC trong lập trình web, Microsoft cuối cùng cũng cho ra mắt framework mới mang tên ASP.NET MVC vào tháng 3 năm 2009. ASP.NET MVC học hỏi những thế mạnh của Ruby on Rails và loại bỏ những điểm yếu của Web Forms. Tất cả mọi thứ trong ASP.NET MVC đều có thể được tùy chỉnh cho phù hợp với nhu cầu ứng dụng. Giờ đây, lập trình viên có thể trực tiếp kiểm soát HTML, CSS và JavaScript. Nhờ vậy, những thư viện hiện đại như Angular, Bootstrap hoặc jQuery có thể được tích hợp dễ dàng với ASP.NET MVC. Do các thành phần trong ứng dụng MVC được tách riêng biệt nên việc kiểm thử ứng dụng trở nên rất dễ dàng. Ngoài ra, hệ thống định tuyến (routing system) của ASP.NET MVC giúp nó tùy chỉnh đường dẫn URL cho thân thiện với người dùng. Đặc biệt, ta được phép cấu hình URL theo bất kì khuôn mẫu nào ta thấy vừa ý, chứ không bị bó hẹp theo mô hình query string khô cứng (và rất không thân thiện với người dùng).

Mặc dù ASP.NET Web Forms vẫn còn được hỗ trợ trong bản Visual Studio 2015 nhưng ASP.NET MVC chính là nền tảng mà Microsoft muốn mọi người sử dụng. Vì là framework nguồn mở nên ASP.NET MVC luôn được nâng cấp, cải tiến với nhiều tính năng mới nhờ cộng đồng lập trình viên đông đảo khắp thế giới. ASP.NET MVC phù hợp hơn với xu hướng lập trình web hiện đại và khắc phục những nhược điểm lớn của ASP.NET Web Forms. Lập trình viên có thể kiểm soát, tùy biến mọi thứ theo ý mình. Từ đó, quá trình thiết kế ứng dụng web cũng trở nên dễ dàng và hiệu quả.