Component Coupling: Acyclic Dependencies Principle – Nguyên lý phụ thuộc tuần toàn

The ADP deals with the relationships between components, the tension between developability & logical design.

WHAT: ADP thực sự là gì?

Nguyên lý: Đồ thị phụ thuộc thành phần không có bất kỳ một đường tròn nào được chấp nhận.

Tưởng tượng trong 1 đồ thị, bạn đang đứng ở 1 thành phần bất kỳ, hãy đi theo mũi tên phụ thuộc, nếu bạn có thể quay về đúng thành phần đó, nghĩa là đồ thị của bạn vi phạm.

Allow no cycles in the component dependency graph.

Ví dụ trong đồ thị sau, ta có thể dễ dàng đi từ thành phần Authorizer, qua Interactors, đến Entities rồi quay về nó.

WHY

Mục tiêu của nguyên lý này là tránh được tình huống “Hội Chứng Buổi Sáng” tiếng anh “Morning after syndrome” – bạn về trễ và commit code của mình lên, nhưng lại có người về trễ hơn, cố gắng sửa lại code của họ làm cho code của bạn không chạy nữa.

Và một nguyên nhân quan trọng gây ra tình trạng này chính là việc phụ thuộc chéo giữa các thành phần trong hệ thống. Vấn đề sẽ trở nên phức tạp và diễn ra nhiều lần hơn nếu như một source code được chia sẻ cho một team càng lớn. Bằng cách áp dụng nguyên lý này ta có thể tránh được những tình huống như vậy.

HOW: Nguyên Lý Nghịch Đảo Phụ Thuộc – “Dependency Inversion Prinple” (Chữ D trong SOLID principles)

Ta có thể sử dụng nguyên lý này để đảo chiều phụ thuộc.   VD: Trong hình mối quan hệ giữa Entities & Authorizer. Muốn bỏ phụ thuộc Entities lên Authorizer, tách interface mà Entities dùng từ Authorizer ra thành 1 component mới cả Entities & và Authorizer đều phụ thuộc lên, VD: Permission.

Thêm thành phần Permissions để bỏ phụ thuộc Entities lên Authorizers

Leave a Reply

Related Post