SOLID
High-level modules should not import anything from low-level modules. Both should depend on abstractions (e.g., interfaces), [not] concretions.(→上位モジュールはいかなるものも下位モジュールから持ち込んではならない。双方とも具象ではなく、抽象(インターフェースなど)に依存するべきである)
この原則は、Mix-inをモチーフにして依存性の注入などのベースになっている。
この原則下のclientは、専門機能が分離されたモジュールにされる。その下位モジュールは専門機能の扱い方を変えたものにされる。専門機能とは、clientがinterfaceを通して利用するserviceであり、上位clientと下位clientは共に、専門機能interfaceに依存することになる。ここでのclientは具象であり、interfaceは抽象である。