質問: ### 前提・実現したいこと いつもお世話になっております。 C#の設計周りについて教えてください。 最近設計の本を読み、SOLIDの原則等を知りました。 ・依存関係逆転の原則 ・インターフェース分離の法則 等を踏まえた結果、全てのclassに対して予めインターフェースを作っておけば 良いのでは無いか?という疑問を持ち始めました。 以下に具体例を書きます。 ### 具体例 ``` public class Hoge : { public void huga() { /**/} } ``` というclassを作ろうとした際、予め ``` public interface Huga { void huga(); } public class Hoge : Huga{ public void huga() { /**/} } ``` のように全classに対してinterfaceを用意する ### 考え classの関数を呼ぶ場合はinterfaceを介して呼ぶことにより 処理を実装ではなく抽象に依存させることになってより再利用性の高いコードに なるのでは?と思いました。 さらにもし「全classにinterfaceを用意する」というルールに問題が無いようでしたら classを実装するたびに「このclassはinterfaceを用意したほうが良いのかな?要らないのかな?」 と迷わなくてすみ、考えることが一つ減って楽だなと思いました。 ダラダラと書きましたが、どのサイトを見ても設計の際 「設計が煩雑になるためinterfaceの乱用は避けよ」 的な注意書きが有るため私のアイディアが間違っているのだとは思うのですが いまいちなぜこの考えがまずいのかが腑に落ちません。 非常に稚拙な質問で申し訳ありませんが、interfaceについての指針のような物を いただけると非常に助かります。 宜しくお願い致します。
回答: そのようなモデルが無いわけではありません。 COM はインターフェースを通じて公開されます。 つまり公開された COM オブジェクトはそのオブジェクトに対応したインターフェースを持ちます。 ただし、「公開された」という注釈がつきます。 内部ではインターフェースのない非公開のオブジェクトを使っていると思われます。 インターフェースは他者に対して公開するものです。 そのメソッドとプロパティはすべて public です。 オブジェクト指向プログラミングにおいて隠蔽は重要な意味を持ちます。なんでもかんでも公開すればいいわけではありません。 これは何でもかんでも全てインターフェースをつけるべきではないという考えに繋がります。