Giải phẫu web framework theo mô hình controller first
Lập trình là nghệ thuật sắp đặt. Có nhiều mô hình web framework, tùy cách sắp đặt mà khác nhau, ví dụ controller first, view first. Bài viết này bàn về các thành phần cơ bản mà một web framework hiện đại theo mô hình controller first thường có.

Controller
Trước tiên request truyền từ web server sẽ đi qua một front controller duy nhất, ví dụ với framework viết bằng PHP là file index.php, bằng Perl là file index.cgi, bằng Java Servlet thì xem định nghĩa trong web.xml. Front controller sẽ dựa vào các luật mapping định nghĩa trong router để biết phải chuyển hướng request đến action nào nằm trong controller nào để xử lí thật sự.Một luật mapping là một ánh xạ từ một cặp HTTP method (như GET, POST) + URL pattern (như /articles/{id}) đến một cặp controller + action. Xu hướng chung hiện nay là map theo kiểu REST. Các luật này giúp URL đẹp hơn (pretty URL). Đối với các ngôn ngữ bị gắn chặt vào web server như trường hợp PHP, Perl + Apache, thì để đạt tính năng pretty URL cần dùng đến mod_rewrite.
Router cần có thêm tính năng reverse mapping để ánh xạ ngược từ controller + action thành URL để dùng trong view (ví dụ link, form).
Action là hàm xử lí request để trả về response. Các action liên quan đến nhau được gom thành một controller. Trong một controller còn có before filter và after filter để chứa các đoạn mã giống nhau từ nhiều action trong controller đó.
Để tránh lỗi CSRF, khi viết action cần biết khi nào dùng GET khi nào dùng POST, form cần có security token.
Model
Ví dụ model là nơi chứa các xử lí liên quan đến database. Vì thường liên quan đến cơ sở dữ liệu quan hệ, nên thường model layer cần có tính năng ORM.Qui tắc chung khi lập trình web là không bao giờ tin data do user nhập (ví dụ từ form). Do đó model cần có tính năng validation để kiểm tra data có đúng format không, và đương nhiên là có tính năng chống SQL injection xưa như trái đất.
View
Mỗi action thường cần một view để hiển thị màn hình trang web. Framework hiện đại cần tách logic ra khỏi presentation, để designer và coder dễ làm việc. Do đó phần view thường dùng template engine. Để đạt tốc độ cao, template engine không dùng cách thay thế chuỗi đơn thuần, mà dùng cách biến đổi template thành mã chương trình rồi biên dịch (ví dụ .jsp -> .java -> .class).View hiện đại thì mỗi view không phải là một cục to uỳnh ứng với một địa chỉ URL của trang web thấy trên màn hình, mà còn có thể refactor ra được thêm thành layout, partial. Làm thế này để các action có thể dùng chung tối đa view của nhau.
Để chống lỗi XSS, template engine cần có tính năng tự động escape dữ liệu từ action.
Nhận xét
Đăng nhận xét