0

私は WPF アプリケーションを開発しており、MVVM 配管を処理するために Caliburn-Micro を使用しています。CM で Event Aggregator を使用して、ナビゲーション イベントをリッスンします。現在、イベント間に共通点はありません。したがって、OrderNavigationEvent、QuoteNavigationEvent、PriceBookNavigationEvent などがあります...

いくつかの列挙型に沿って、必要なナビゲーション イベントのさまざまな型をすべて持つ一般的な NavigationEvent クラスを作成することを考えました。何かのようなもの:

public enum NavigationDestinations
{
    Orders,
    Quotes,
    PriceBook
}

public enum NavigationOptions
{   
    Open,
    New,
    Listing
}

public class NavigationEvent
{
    public NavigationDestinations NavigationDestination {get; set;}
    public NaviationOptions NavigationOption {get; set;}
    public int Id {get; set;}
}

そして、Handle(NavigationEvent メッセージ) をセットアップできます。これは、IF ステートメントの膨大なコレクションになります。それはうまくいくでしょうが、うーん

この問題にどのようにアプローチできるかについて何か提案はありますか?

4

1 に答える 1

1

共通性のないイベントクラスの「基本」クラスを作成することはお勧めしません。あなたは単一責任の原則を破っています。あなたの3つのイベントは、公開されるたびに何か違うことをする必要があります。

それらを分解し、_eventAggregator.Publish(class)をクラスに呼び出して、サブスクライバーにサブスクライブさせることをお勧めします。

1つのクラスでこれらのイベントを3つ必要とする場合は、3つ実行してください。IHandle<OrderNavigationEvent>, IHandle<QuoteNavigationEvent>, IHandle<PriceBookNavigationEvent>

そして、クラスにサブスクライブ_eventAggregator.Subscribe(this);させると、マルチIFによるチェックがなくなり、特定のイベントが公開されたときに特定の機能に集中できるようになります。

次に、このイベントごとに3つの異なるハンドルがあります

public void Handle(QuoteNavigationEvent eventArgs)
{
  ...
}

public void Handle(OrderNavigationEvent eventArgs)
{
 ...
}

public void Handle(PriceBookNavigationEvent eventArgs)
{
 ...
}
于 2012-08-28T02:01:51.607 に答える