Quay lại thư viện câu hỏi
ruby on rails Junior

Tại sao việc sử dụng Callback trong Active Record quá mức lại được coi là một anti-pattern trong các dự án Enterprise và cách khắc phục?

Tại sao là anti-pattern

  • Khó kiểm soát luồng: Các callback như after_save hoặc before_create chạy ngầm, khiến việc debug trở nên khó khăn khi logic nghiệp vụ thay đổi.
  • Vi phạm nguyên tắc Single Responsibility: Model trở nên quá cồng kềnh (Fat Model) khi chứa quá nhiều logic nghiệp vụ không liên quan trực tiếp đến dữ liệu.
  • Khó khăn khi Testing: Các callback chạy tự động mỗi khi lưu dữ liệu, gây khó khăn cho việc cô lập unit test.

Cách khắc phục

  • Service Objects: Chuyển logic nghiệp vụ vào các Service Objects để xử lý các tác vụ phức tạp.
  • Form Objects: Sử dụng Form Objects để xử lý dữ liệu đầu vào và các logic validation trước khi lưu vào cơ sở dữ liệu.
  • Pub/Sub hoặc Observers: Sử dụng các cơ chế sự kiện (Event-driven) để tách biệt các tác vụ phụ (như gửi email, thông báo) ra khỏi luồng lưu dữ liệu chính.

Lưu ý thực chiến

Chỉ nên sử dụng callback cho các logic liên quan trực tiếp đến tính toàn vẹn của dữ liệu trong chính model đó (ví dụ: format lại email trước khi lưu).

Luyện tập câu hỏi này trong chế độ đếm ngược mô phỏng phỏng vấn thật:
Phòng Luyện Tập
Khóa học Chuyên sâu Chủ đề ruby on rails

Làm Chủ Phỏng Vấn & Nâng Cao Trình Độ Chuyên Nghiệp

Hệ thống khóa học thực chiến chuẩn Enterprise giúp bạn tự tin chinh phục mọi kỳ phỏng vấn kỹ thuật và thăng tiến thu nhập.

Tải Tuyển Tập 100+ Câu Hỏi Phỏng Vấn Chuyên Sâu (PDF)

Bộ tài liệu chuẩn Senior do Unicode Academy tuyển chọn & biên soạn, hỗ trợ tải về định dạng PDF chuẩn in ấn.

High-Ticket Mentoring
Cần Mentor Phỏng Vấn Thử 1-1 & Tối Ưu CV?

Mô phỏng phỏng vấn kỹ thuật thực tế 1-1 qua Google Meet, nhận xét chi tiết điểm mạnh/yếu và sửa CV trực tiếp cùng giảng viên Unicode.

AI Resume Scanner
Kiểm Tra CV Chuẩn ATS Miễn Phí

Tải CV của bạn lên để hệ thống AI rà soát từ khóa kỹ năng, định dạng và tính điểm chuẩn nhà tuyển dụng.

vừa nâng cấp PRO khóa 1 phút trước   Tìm hiểu khóa học