Minh họa cho Định luật Demeter
Law #43 Thiết kế

Định luật Demeter

Law of Demeter

Một đối tượng nên nói chuyện với các thành phần gần nó, không nên luồn sâu qua nhiều tầng để lấy dữ liệu.

Nguồn tham khảo: Laws of Software Engineering

Tổng quan

Định luật Demeter, hay "đừng nói chuyện với người lạ", khuyên một object chỉ nên tương tác với bản thân, thành phần trực tiếp, tham số hoặc object nó tạo ra. Nó giảm coupling do luồn sâu qua cấu trúc nội bộ của object khác.

Ý chính

  • Chuỗi gọi kiểu a.getB().getC().doThing() làm A phụ thuộc vào cấu trúc bên trong của B và C.
  • Object nên yêu cầu collaborator làm việc thay vì tự đào vào internals của collaborator.
  • Giảm kiến thức về object khác giúp thay đổi cấu trúc nội bộ ít phá code bên ngoài hơn.

Ví dụ từ nguồn

Presenter gọi view.getTextField().setText("Hello") biết quá nhiều về cấu trúc UI; tốt hơn là view.showGreeting("Hello").

Service không nên tự đi qua user.account.subscription.plan để quyết định quyền nếu domain object có thể cung cấp method rõ nghĩa hơn.

Nguồn gốc

Luật này được Ian Holland và các đồng nghiệp tại Northeastern University mô tả khoảng năm 1987 trong Demeter Project.

Lưu ý khi áp dụng

Đừng biến luật này thành wrapper vô nghĩa khắp nơi. Mục tiêu là giảm coupling có hại, không phải cấm mọi chain API.

← Quay lại danh sách 56 luật