DIP: Dependency Inversion Principle
実装の詳細が抽象化した部分に依存するべきである。
例えば如何に有能な大工がいたとしても、特定のメーカの決まったトンカチしか使えないようでは魅力半減です。
これはプログラムの方でも同じ事が言えます。
確かにトンカチが無くては家が建てられないかもしれません(そういうことにしといてくだちい><)。
しかし、正確には「トンカチ」では無く「釘を打つもの」が必要なだけです。「釘を打つもの」と言う責任を持った存在ならなんでも構わないのです。
つまり、実際にトンカチを使う場合は「釘を打つもの」インターフェイスを呼び出し、別の場所で使用可能のツールを使って実装する。そうすれば使えるツールが限られた環境でも「核」となる部分を弄らずに自由に付け替えることが出来る。
下位モジュールを使う場合は抽象を使って間接的に呼び出せ
と言う事です。