優れたオブジェクト指向設計を実際に体験したいので、関心の分離をレガシーアプリに適用することにしました。
私は、これらの呼び出しがコードベース全体に散らばっているのは気が進まないと判断しました。
ConfigurationManager.AppSettings["key"]
これらの呼び出しを静的メソッドにカプセル化するヘルパークラスを作成することでこれに取り組んだことがありますが、もう少し先に進む機会になると思いました。
最終的には、依存性注入の使用を目指し、常に「インターフェースへのコーディング」を行う必要があることを認識しています。しかし、私はあまりにも大きな一歩を踏み出したくありません。それまでの間、私はその究極の目標に向けて小さな一歩を踏み出したいと思います。
誰かが彼らが推奨するステップを列挙できますか?
頭に浮かぶものは次のとおりです。
クライアントコードを具体的な実装ではなくインターフェイスに依存させる
コンストラクターまたはプロパティを介してインターフェースに依存性を手動で注入しますか?
IoCコンテナを選択して適用する前に、コードを実行し続けるにはどうすればよいですか?
依存関係を満たすために、構成値を必要とするクラスのデフォルトコンストラクターは、(静的CreateObject()メソッドを使用して)Factoryを使用できますか?
確かに私はまだファクトリーに具体的な依存関係を持っていますか?...
Michael Feathersの本に浸ったので、継ぎ目を導入する必要があることはわかっていますが、十分な数または多すぎる数を導入した時期を知るのに苦労しています。
アップデート
クライアントがWidgetLoaderのメソッドを呼び出して、必要な依存関係(IConfigReaderなど)を渡すと想像してください。
WidgetLoaderは、構成を読み取ってロードするウィジェットを見つけ、WidgetFactoryにそれぞれを順番に作成するように要求します。
WidgetFactoryはconfigを読み取り、ウィジェットをデフォルトでどの状態にするかを認識します
WidgetFactoryはWidgetRepositoryに委任してデータアクセスを行います。WidgetRepositoryはconfigを読み取り、ログに記録する診断を決定します。
上記のいずれの場合も、IConfigReaderは、コールチェーンの各メンバー間でホットポテトのように渡される必要がありますか?
工場は答えですか?
以下のコメントを明確にするために:
私の主な目的は、いくつかのアプリ設定を構成ファイルから他の形式の永続性に徐々に移行することです。注入された依存関係を使用すると、抽出してオーバーライドして単体テストの良さを得ることができますが、私の主な関心事は、設定が実際に永続化される場所を認識し始めるのに十分なカプセル化を行うことではありません。