私はwinformsアプリを持っています。私はそれを 3 人のクライアントに渡しましたが、それぞれが小さな微調整やカスタマイズを望んでいます。これを実現するには、クライアントごとに個別のバージョンを保持する必要があります。このようにして多くのバージョンを作成することになるかもしれません。依存関係の挿入がこれを処理する方法だと思っていましたが、メイン メソッドに依存関係を登録する必要があり、各クライアント DLL への参照を追加する必要があると聞いたので、別のバージョンが必要です。これを処理するための好ましいオブジェクト指向の方法は何ですか? これを処理するより良い方法はありますか?
3 に答える
プラグイン パターンを使用して、実行時にアセンブリをロードできます: (リンクから)
分離インターフェイス (476) は、アプリケーション コードが複数のランタイム環境で実行され、それぞれが特定の動作の異なる実装を必要とする場合によく使用されます。
ほとんどの DI フレームワークは、この機能を提供します。独自のフレームワークを作成したくない場合は、選択したフレームワークの多くの例を取得で検索できます。
構成ファイルを使用してDIコンテナーを構成できるため、同じバイナリーを異なる構成ファイルで再利用して、さまざまなカスタマイズを実装できます。ただし、さまざまな構成をすべて徹底的にテストする必要があります。同じアプリケーションのわずかに異なるバージョンは、予期しない中断を引き起こすことなく維持するのは簡単ではありません。
カスタマイズの性質によっては、関連するすべての変更をプロジェクトの個別の部分に取り込むことができる場合があります(プロジェクト全体にそれらを分散させておくのではありません)。可能であれば(たとえば、ファイリング機能がクライアントによって提供される)、DLLを動的に(たとえば、構成ファイルに基づいて)ロードし、DLL内の関数が(パラメーターに基づいて)カスタマイズを実行するために必要な機能を実行できるようにすることができます。メインコードによって提供されます)。
このようにして、クライアントの必要に応じて動的に変更できる(起動時にdllをロードする場合でも)事前定義されたフックをコードに提供します。クライアントが変更したい個別の機能がある場合は、これらのDLLを複数のDLLに分割できますが、必ずしもすべての機能がすべての機能であるとは限りません。次に、DLLの「デフォルト」バージョンを提供できます。
誰がフックを開発するかは、クライアントとのセットアップによって異なります。
これらのフックがどのように機能するかについて、適切なドキュメントを提供するようにしてください。