© 2026 Laravel

Refactor: Data Class (Class 'bù nhìn')

2 phút đọc
#refactoring #clean-code #encapsulation

Mục lục bài viết

Sử dụng các mục để điều hướng nhanh

#1. Dấu hiệu (Smell)

Class chỉ có các biến (public hoặc private + getter/setter). Mọi logic tính toán, xử lý đều nằm ở class khác.

#2. Giải pháp: Move Behavior

  • Move Method: Nếu Service class luôn lấy data từ Data Class này để tính toán, hãy chuyển logic đó vào chính Data Class (Encapsulation).
  • Lưu ý: Nếu class đó là DTO (chỉ để truyền dữ liệu), thì nó không phải là Data Class “bù nhìn” – nó đang làm đúng nhiệm vụ của nó.

#3. Câu hỏi nhanh

Q: Sự khác biệt giữa Data Class và DTO? A: Data Class thường ám chỉ sự “thiếu logic” nơi đáng lẽ cần có. DTO (Data Transfer Object) là một design pattern có mục đích rõ ràng: truyền tải data giữa các hệ thống/layer. Đừng nhầm lẫn giữa chúng. Q: Nguyên tắc cốt lõi của OOP? A: “Don’t ask, tell!” (Đừng hỏi object, hãy bảo object làm). Thay vì lấy data rồi tính toán ở ngoài (ask), hãy bắt đối tượng tự tính toán giá trị của nó (tell).

Bài viết liên quan