アプリケーションにカスタマイズ フックを挿入する最良の方法は何だろうと考えています。基本的に、私のアプリケーションは 2 つのアセンブリに分割されます。Core
すべてのビジネス ロジックをUserInterface
含むアセンブリと、GUI、コントローラー クラス (「パッシブ ビュー」と呼ばれる逸脱した MVC パターンを使用しています)、およびいくつかのヘルパー クラスを含むアセンブリです。コア アセンブリは、他のいくつかのアプリケーションでも使用されます。
私のアプリケーションは、当社が他社からの注文を処理するために使用しています。一般的なプロセスはすべての企業で同じですが、顧客固有の小さな違いがあります。現在、これらの逸脱は、においがするコア アセンブリに直接実装されています。これらの詳細を分離し、顧客ごとに 1 つのオブジェクトにカプセル化して、UserInterface アセンブリに入れることができるすべての顧客固有の詳細を含む中央オブジェクトを作成したいと考えています。
これを達成するためにイベントを使用することを考えました。コア クラスにいくつかのイベントを追加することで、コントローラー クラスは、特定の顧客向けにこれらの逸脱を実装するメソッドをサブスクライブまたはサブスクライブ解除できるようになります。
これを行うには 2 つの方法が考えられます。これらのバインドを手動で追加するか、逸脱したメソッドが存在する場合は自動的に追加するかです。後者については、次のようなことを考えています。
foreach (Order order in form.SelectedOrders) {
CustomerExtension customer = customerExtensions[order.Customer];
if(Exists(customer.StatusChanging(...)) // Pseudo Code!
OrderManager.StatusChanging += new StatusChangingEventHandler(customer.StatusChanging(...));
order.SetStatus(newStatus);
if(Exists(customer.StatusChanging(...)) // Pseudo Code!
OrderManager.StatusChanging -= new StatusChangingEventHandler(customer.StatusChanging(...));
}
これを達成するにはリフレクションを使用する必要があると思いますが、これは何度も実行する必要がある操作に対して実行可能ですか?
または、カスタマイズ フックを追加しながら、顧客ごとに偏差を一元化するより良い方法はありますか?
[編集] 質問を完全に修正しました。