私は現在、小さなパーソナルウィンドウ(デスクトップ).NET LOBアプリケーションを作成しています。この機会を利用して、 DIに関する知識と経験を増やしたいと考えています。アプリケーションをモデル、DAO、GUIの各部分に分けましたが、次のような分野横断的な概念を実装する方法を考えています。
- 現在ログオンしているユーザー-次の目的で使用されます:
- 権利の主張-アプリケーションの一部で、ユーザーが必要な権利を持っているかどうかを確認します
- 監査-ユーザーアクションを別のデータベーステーブルに記録する
- 等
- 現在のアプリケーションパラメータ(構成ファイルまたはテーブルからロード)-次の目的で使用されます:
- ビジネス戦略の定義
- UIの定義(たとえばテーマ)
- 等
- ファイル/データベースログへのログ記録-次の目的で使用されます:
- UIアクションのログ記録(ボタンのクリックなど)
- ビジネスプロセスのログ記録(計算の結果、戦略の決定など)
- インフラストラクチャのロギング(CRUD操作に使用されるSQL)
- 等
現時点では、この情報を提供するためのいくつかの方法を考えることができます。
- 静的プロパティの使用-UserEntity.Current、Configuration.Current、Logger.Currentなど。
- 長所:
- 実装が簡単
- 使いやすい
- 短所:
- 乱雑になります
- アプリケーションのどの部分が何を使用しているかは不明です
- より細かい粒度が必要な場合(たとえば、アプリケーションの一部のプロセスで現在の値をオーバーライドする必要がある場合)は使用できません。
- 長所:
- DIの使用-この情報を必要とする各クラスにプロパティ/コンストラクターパラメーターを与える
- 長所:
- クラスごとに必要なものは明らかです
- ユニットテストは簡単です
- 短所:
- コンストラクターを爆発させるようです
- クラスにデフォルトのコンストラクターが必要な場合に問題が発生します
- クラスがサードパーティ(XAML)によってインスタンス化されるときにセットアップが難しい
- 長所:
- ServiceLocatorの使用
- 長所:
- セットアップが簡単
- 使いやすい
- 短所:
- アプリケーションのどの部分が何を使用しているかは不明です
- より細かい粒度を設定するのは難しい(ただし不可能ではない)
- 長所:
私は以前にServiceLocatorを使用したことがあるので、現在ServiceLocatorに傾倒しており、非常にうまく機能しました。しかし、私はコントロールの喪失を心配しています。設計上の問題を修正しようとする代わりに、サービスロケーターにたどり着くのは非常に簡単です。
誰かが彼らの経験/知識を提供できますか?