そのような質問がおそらくすでに投稿されているという事実を私はよく知っています。しかし、このケースでの IoC の関与と多くのコードにより、私が新しい会社で同僚に会ったことで、この疑問が生じました。
シナリオ:
ある製品のコードベースでは、この同僚が作成したすべてのインターフェースが明示的に実装されています。アプリケーション全体は構造マップを介して構築されますが、いくつかの場所では具象型が使用され、このようにキャストされます
((IInterface)concreteClass).SomeMethod()
バックグラウンド:
その同僚は、すべてのインターフェイスを明示的に実装することについて尋ねた後、最近 StructureMap を導入しましたが、多くの人はまだ具象型を使用していると説明してくれました。つまり、本質的には、社内の人々を「教育する」ための手段です。
問題に関する私のセント:
まず第一に、StructureMap への切り替えは数年前に行われました。これは一種のインターフェイスをより多く使用することを強制しますが、私の意見では、これは正しい方法ではありません。私の見方では、具象型について知っている人は実装を見て、上で示したものに簡単にアクセスできます...キャストするだけです。明確なコミュニケーションまたはコーディング規則により、これははるかに改善されます。IoC が使用され、具体的なクラスがない場合、インターフェイスを明示的に実装してもまったく役に立ちません。
また、これが継承を台無しにする可能性があると聞いたことがありますが、例はわかりません。また、 Jon Skeetが上記の方法ではなく、IEnumerable<> やその他の名前の衝突のように意図された方法で使用することを思いとどまらせているのを見てきました。
誰かが私のためにこの問題に光を当てることができますか. 長所と短所 (ただし、私はそれをしないことに非常に偏っていますが、ここに投稿します)、特に理由はどちらか一方です。
ありがとう!
編集:これが正しいか間違っているかの問題ではなく、本当の答えがないこともよく知っています。これは、各アプローチの欠点を知るために学ぶべき問題です。あるシナリオで一方のアプローチを他方のアプローチよりも使用するのはなぜですか?