0

我正在开发一个 WPF 应用程序,我使用 Caliburn-Micro 来处理 MVVM 管道。我使用 CM 中的事件聚合器来监听导航事件。目前,事件之间没有任何共性。所以我有一个 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 message),然后归结为大量的 IF 语句。它会工作,但是

关于如何解决这个问题的任何建议?

4

1 回答 1

1

我不建议创建一个没有共性的事件类的“基”。你违反了单一职责原则。您的三个事件在发布时需要做一些不同的事情。

我建议将它们分开并将 _eventAggregator.Publish( class ) 调用到一个类并让订阅者订阅它。

如果您需要在一堂课中进行三项此类活动,那么请执行三项IHandle<OrderNavigationEvent>, IHandle<QuoteNavigationEvent>, IHandle<PriceBookNavigationEvent>

并让班级订阅_eventAggregator.Subscribe(this);它,然后您将消除多 IF 对它的检查,当某个事件发布时,您可以专注于某个功能。

然后,每个事件都有三个不同的句柄

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

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

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