No more Death March

あるSEのチラシの裏 C# WPF

c# リフレクションの使いどころを考える

ソフト全体で使いたいインターフェースがある時、
インターフェースとその実装を同じプロジェクトに入れると実装部分をメンテナンスする度に大規模なビルドが必要になる。

そもそも抽象(インターフェース)に依存して処理を標準化するのに実装を直す度にビルドが走るのはおかしな話。

それを回避する方法として、インターフェースと実装を分離し、UnityなどのDIを使うのも良いのだけど、
粒度の小さく凝集度の高いものを毎回DIで実現しようとするとDIのためのコーディングだけで手間がかかってしまう。

そこでリフレクションを使ってインターフェースが宣言されているプロジェクト内でリフレクションを使って実装クラスのアセンブリを読み込んでしまう。

プロジェクトの依存関係は実装⇒インターフェースの向きなので依存関係に逆転した読み込みが行われることになる。

一見するとおかしな考え方に思えるが、こうすることによって実装以外のインターフェースに依存するプロジェクトから
インターフェースの実装プロジェクトに対する依存を完全に排除することが出来るし、実装をチューニングしたりリファクタリングしても、
クライアントプロジェクトのビルドが実行されることはなくなる。