Article:
Lỗ chân trâu MVC: viết quá nhiều mã trong C
2032
ngocdaothanh.myopenid.com 172Updated over 3 years ago |

What và How thường là 2 câu hỏi quan trọng nhất đối với lập trình viên. Đa số lập trình viên đều biết MVC là gì và dùng nhoay nhoáy hàng ngày. Bài viết này đề cập đến tật xấu thường gặp khi sử dụng MCV: viết quá nhiều mã trong C.
Nguồn gốc của tật xấu
MVC thì hiển nhiên chỉ có thể viết mã ở 3 chỗ này:
- V chỉ để hiển thị giao diện, không phải chỗ để viết mã. Đa số lập trình viên ban đầu hay viết mã trong V, nhưng khi dùng MVC framework quen, tự nhiên dần bỏ được tật xấu này.
- Như vậy chỉ còn C và M. Thường ta nương theo dòng chảy dữ liệu để lập trình để xử lí, nên sẽ đụng C trước khi đụng M. Do đó nếu không tỉnh táo, sẽ bị tật xấu viết rất nhiều mã trong C rất ít mã trong M, và M hầu như chỉ còn gồm những thứ liên quan đến cơ sở dữ liệu.
Tại sao nên viết ít mã trong C?
Có ít nhất 2 lí do chính đáng liên quan đến nhau:
- Dễ bảo trì. Trong quá trình làm project, luôn phải refactor để giảm số lượng tập tin và lượng mã để dễ bảo trì. Về số lượng tập tin, lượng tập tin V lớn nhất, rồi đến C, cuối cùng là M. Do đó nếu viết nhiều mã trong C, xác xuất trùng lặp mã sẽ cao hơn là viết trong M.
- Dễ test. Khi test luôn test M trước, có thời gian thì test thêm C và V. Viết test cho V khó hơn cho C khó hơn cho M. Do đó sẽ dễ test hơn nếu tập trung mã vào M.
Làm thế nào để viết ít mã trong C, nhiều mã trong M?
Xem sơ đồ sau:

Về bản chất, M không phụ thuộc giao diện. Giả sử chương trình web được thiết kế và thực hiện tốt, nếu muốn biến nó thành chương trình desktop thì chỉ cần thay đổi phần V và C. M là cái hồn cốt của chương trình, nhiều người có thói quen thiết kế cơ sở dữ liệu trước tiên khi làm project là vì vậy (tất nhiên, cơ sở dữ liệu chỉ là một phần của M).
Giả sử đang viết chương trình web, từ nhận xét trên ta rút ra phép thử để biết nên đặt đoạn mã nào đó vào M hay C: Nếu đặt vào C mà làm cho về sau muốn thêm giao diện desktop phải copy đoạn mã này, thì hãy viết vào M.
Thần chú: fat model, thin controller, stupid view.
Tránh viết V helper trong M
Có câu: tránh vỏ dưa gặp vỏ dừa. Thường khi bắt đầu viết nhiều mã trong M, ta lại mắc tật xấu khác là viết V helper trong M.
V helper là gì? Đó là các hàm tiện ích chỉ dùng cho V, M và C không dùng. Do đó hãy đưa chúng vào thư mục helper riêng thay vì M. Đối với Rails, V helper nên đưa vào thư mục app/helpers:
- Hàm tiện ích nào dùng trong nhiều V của nhiều C khác nhau thì đặt trong application_helper.rb.
- Hàm tiện ích nào chỉ dùng trong V của 1 C (ví dụ UsersController), thì đặt trong helper của V của C đó (ví dụ users_helper.rb).
172
over 3 years ago