C# 结构化程序导航
我正在开发一个WPF应用程序,我使用Caliburn Micro来处理MVVM管道。我使用CM中的事件聚合器来侦听导航事件。目前,这些事件之间没有任何共同之处。所以我有一个OrderNavigationEvent、QuoteNavigationEvent、PriceBookNavigationEvent等等 我考虑在几个枚举中创建一个通用的NavigationEvent类,这些枚举具有我需要的所有不同类型的导航事件。比如:C# 结构化程序导航,c#,wpf,caliburn.micro,C#,Wpf,Caliburn.micro,我正在开发一个WPF应用程序,我使用Caliburn Micro来处理MVVM管道。我使用CM中的事件聚合器来侦听导航事件。目前,这些事件之间没有任何共同之处。所以我有一个OrderNavigationEvent、QuoteNavigationEvent、PriceBookNavigationEvent等等 我考虑在几个枚举中创建一个通用的NavigationEvent类,这些枚举具有我需要的所有不同类型的导航事件。比如: public enum NavigationDestinations {
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;}
}
然后我可以设置一个句柄(NavigationEvent消息),它可以归结为一个庞大的IF语句集合。它会起作用,但是呃
对我如何处理这个问题有什么建议吗 我不建议创建一个事件类的“基本”类,该类中没有公共性。你违反了单一责任原则。无论何时发布,您的三个事件都需要做一些不同的事情 我建议将它们分开,并调用_eventAggregator.Publish(class)到一个类中,让订阅者从中订阅 如果您需要在一个类中使用其中的三个事件,请执行三个
IHandle、IHandle、IHandle
并让类订阅eventAggregator.subscribe(this)编码>到它,然后您将消除多重IF检查,当某个事件发布时,您可以专注于某个功能
然后,每个事件都有三个不同的句柄
public void Handle(QuoteNavigationEvent eventArgs)
{
...
}
public void Handle(OrderNavigationEvent eventArgs)
{
...
}
public void Handle(PriceBookNavigationEvent eventArgs)
{
...
}
你描述的设置正是我现在所拥有的。我不喜欢它(除了一公吨的IHandles)的主要原因是我想像浏览器一样实现前向/后向导航。我不确定我将如何采取我目前的设置上面,并避免有一些值得一提的日常WTF。实际上,这是很容易的,因为向后/向前。我认为接口是继承树的一部分,我必须将对象从INavigationHistory转换回其原始事件。但我没必要这么做!等等,如果你想实现一个向前/向后导航的浏览器,为什么不使用页面控件呢?它给了你。。