1. ホーム
  2. design-patterns

[解決済み】インターフェイスを作成するタイミングはどのように判断するのでしょうか?

2022-04-11 21:35:38

質問

開発学習の中で、インターフェースについてもっと勉強しなければならないと感じるようになりました。

よく読んでいるのですが、いまいちピンとこないのです。

みたいな例を読んだことがあります。しかし、何か作業をしていて、「ここでインターフェイスを使うべきだ!」と感じたことはありません。

何が足りないのだろう?どうしてこんなに難しい概念なんだ!?私はただ、具体的な必要性に気付かないかもしれないという事実に怯えているのです。開発者として何か足りないような気がするんです。もし、このような経験をされた方で、ブレイクスルーされた方がいらっしゃいましたら、この概念を理解するためのヒントを頂ければ幸いです。ありがとうございました。

どのように解決するのですか?

この具体的な問題を解決するのが

4つのタイプのa,b,c,dがある場合、コードの至る所に以下のようなものがあります。

a.Process();
b.Process();
c.Process();
d.Process();

IProcessableを実装させたらどうでしょう。

List<IProcessable> list;

foreach(IProcessable p in list)
    p.Process();

これによって、たとえば同じことをするクラスを50種類追加したときに、はるかにうまくスケールします。


もう一つ、具体的な問題です。

System.Linq.Enumerableを見たことがありますか?これは、IEnumerableを実装している任意の型に対して操作する、大量の拡張メソッドを定義しています。IEnumerable を実装するものは基本的に "I support iteration in a unordered foreach-type pattern" と言っているので、任意の列挙型に対して複雑な動作(Count, Max, Where, Select, etc)を定義することができます。