一番重要なこの件もRustは問題児のクラスがないから
・高水準⇔低水準の機能ごとにトレイトを定義して
・低水準は機能ごとにそのトレイトを実装して
・高水準は機能ごとにそのトレイト(のメソッド等)を使う形だけになって
そのまま原則を満たしてるのよね

>依存性逆転の原則
>①高水準モジュールは低水準モジュールに依存してはならない (その逆も同様)
>②両者とも抽象(トレイトやインターフェースや抽象クラスなど)に依存すべきである
>③抽象は詳細に依存してはならず、詳細が抽象に依存すべきである