StockTraderRI是Prism中自带的一个简易的股票模拟系统。这里我们只讨论它的WPF版本。截图如下:

让我们根据之前学习的Prism框架来进行分析,这个系统在结构上是由4个Module组成的,它们都位于下图的Module文件夹中,分别名为Market、News、Position和Watch:

我们可以从StockTraderRI项目的StockTraderRIBootstrapper类的GetModuleCatalog方法中看到这4个Module之间的依赖关系:
protected override IModuleCatalog GetModuleCatalog()
{
var catalog = new ModuleCatalog();
catalog.AddModule(typeof(MarketModule))
.AddModule(typeof(PositionModule), "MarketModule")
.AddModule(typeof(WatchModule))
.AddModule(typeof(NewsModule));
return catalog;
}
(其他几个项目——StockTraderRI.Infrastructure是4个Module都要使用的公共类库,非常重要,我们后面会对其逐步介绍;而StockTraderRI.ChartControls则是包括了各种图表的控件库,与Prism框架是无关的,于是我在自己的实现中只是添加了对这个dll的引用,而没有任何源码实现,也不对其代码进行分析)。
让我们沿着Module这条线索继续探究下去,去发现每个Module中的View与Region的对应关系。要知道,Module只是“银枪蜡鼠头”,具体的界面是由Module中所包括的若干小的View来完成的,而Region则是承载一个或多个View的容器。
从大处着眼,StockTraderRI是由4个Region组成的,如下图所示:

这4个Region都定义在StockTraderRI.Infrastructure项目的枚举RegionNames中:
public static class RegionNames
{
public const string MainToolBarRegion = "MainToolBarRegion";
public const string MainRegion = "MainRegion";
public const string OrdersRegion = "OrdersRegion";
public const string SecondaryRegion = "SecondaryRegion";
public const string ActionRegion = "ActionRegion";
public const string ResearchRegion = "ResearchRegion";
}
注意到,枚举中多了2个Region,分别是OrdersRegion和SecondaryRegion。这里牵扯到了Composite View的技术。
在ActionRegion中,承载了OrdersView,而就在这个xaml中,嵌套了OrdersRegion,而OrdersRegion则承载了OrderCompositeView。如下图所示。

在Shell这个View中,有一行声明引用:
infBehaviors:RegionPopupBehaviors.CreatePopupRegionWithName="{x:Static inf:RegionNames.SecondaryRegion}"
就是说,在SecondaryRegion中,承载了NewsReader这个View,这是用来在点击新闻连接时弹出新窗体的。关于这个细节技术,我们等到了News这个Module以后再讨论。
那么,相应地又有多少View呢?我试着统计了一下,共计4大类11个,列举如下:
1.其中6个View对应于下图:
|
View
|
被哪个Region承载
|
所在Module
|
|
TrendLineView
|
ResearchRegion
|
Market
|
|
ArticleView
|
ResearchRegion
|
News
|
|
OrdersView
|
ActionRegion
|
Position
|
|
PositionPieChartView
|
ResearchRegion
|
Position
|
|
PositionSummaryView
|
MainRegion
|
Position
|
|
AddWatchView
|
MainToolBarRegion
|
Watch
|

2.上面图中的OrdersView么?它是由3个View复合而成的,列举如上。
|
View
|
被哪个Region承载
|
所在Module
|
描述
|
|
OrderCompositeView
|
OrdersView中的OrdersRegion
|
Position
|
|
|
OrderCommandsView
|
内含在OrderCompositeView中
|
Position
|
Submit/Cancel按钮
|
|
OrderDetailsView
|
内含在OrderCompositeView中
|
Position
|
Bug/Sell
|
3.NewsReader是在点击ArticleView时弹出的,如下图所示。
|
View
|
被哪个Region承载
|
所在Module
|
|
NewsReader
|
SecondaryRegion
|
News
|

4. WatchListView是在AddWatchView中输入股票号后展示的,如下图所示。
|
View
|
被哪个Region承载
|
所在Module
|
|
WatchListView
|
MainRegion
|
Watch
|

posted @ 2009-07-13 00:49
包建强 阅读(645)
评论(1) 编辑 收藏 网摘 所属分类:
Prism