Giải phẫu web framework theo mô hình controller first
mvc
4
White

Ngoc Dao viết ngày 21/03/2016

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.

Các thành phần khác

Ví dụ session, flash, i18n, cache.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Ngoc Dao

102 bài viết.
284 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
62 8
Làm thế nào để nâng cấp trang web mà không làm gián đoạn dịch vụ? Đây là câu hỏi phỏng vấn các công ty lớn thường hỏi khi bạn xin vào vị trí làm lậ...
Ngoc Dao viết hơn 2 năm trước
62 8
White
40 1
Bài viết này giải thích sự khác khác nhau giữa hai ngành khoa học máy tính (computer science) và kĩ thuật phần mềm (software engineering), hi vọng ...
Ngoc Dao viết hơn 2 năm trước
40 1
White
34 1
Nếu là team leader, giám đốc công ty hay tướng chỉ huy quân đội, vấn đề cơ bản bạn gặp phải là “hướng mọi người đi theo con đường bạn chỉ ra”. Thử...
Ngoc Dao viết hơn 2 năm trước
34 1
Bài viết liên quan
White
0 0
Có nhiều web framework. Để nắm bắt được cần phân loại. Có nhiều cách phân loại.Phân loại theo thứ tự các phần M, V, C xử lí request, thì có thể chi...
Ngoc Dao viết hơn 2 năm trước
0 0
White
3 1
Giới thiệu về Mithril framework (Ảnh) (Link) Thật ra dự án này cũng đã được phát triển khoảng một năm rồi, theo như thời gian contributors của dự...
Dinh Duong viết hơn 2 năm trước
3 1
Male avatar
2 6
Hôm nay tình cờ nghiền ngẫm về một động tác lập lại liên tục là khi thêm vào một sản phẩm mới . Việc đầu tiên sẽ tiến hành kiểm tra sản phẩm đó đã ...
trinq viết hơn 3 năm trước
2 6
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
102 bài viết.
284 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!