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.