はじめに
結局、SOLIDも低結合、高凝集を目指すから、「知っている、知らない」という(依存に関する)文言で説明するほうが、初心者が意識すべきこととしてはよいのかもしれないと思ったので、なんとなく書きました。
自分は、依存しても問題ない、知っていても問題ない、これは知るべきではないというふうに考えながら開発してます。
後で肉付けしようかなって思っています。
単一責任の原則
「クラスを変更する理由は一つでなければならない。」という原則です。
クラスは自分が担当すべき領域以外知っていてはならず、知っている場合には、単一責任の原則に違反しています。
開放閉鎖原則
「拡張に対して開いており、修正に対して閉じていなければならない。」という原則です。
クラスは具体的に何を受け入れるか知らず、知っている場合には、開放閉鎖原則に違反しています。
リスコフの置換原則
「派生型は基本型と置換可能でなければならない」という原則です。
利用側は、具体的に何型かを知らない状態になります。仮に知っている場合には、リスコフの置換原則に違反しています。
インターフェース分離の原則
「クライアントに、クライアントが利用しないメソッドへの依存を強制してはならない」という原則です。
使用しないインターフェースについて知らない、知っている場合には、インターフェース分離の原則に違反しています。
依存性逆転の原則
「上位レベルのモジュールは下位レベルのモジュールに依存すべきではない。両方とも抽象に依存すべきである。抽象は詳細に依存してはならない。詳細が抽象に依存すべきである。」という原則です。
依存はすべて知っているという形に置き換えられるので、「上位は下位を知るべきではない、両方とも抽象を知るべきである。抽象は詳細を知るべきではない。詳細が抽象を知るべきである。」という感じになります。
終わりに
依存した場合にどうなるかっていうのを考えて開発してもらうと、テスタビリティや拡張性、保守性について意識して開発してもらえるのかなーと思う今日このごろです。