(一)RI架构分析

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

clip_image002

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

clip_image004

      我们可以从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组成的,如下图所示:

clip_image006

      这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。如下图所示。

clip_image008

      在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

clip_image010

      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

clip_image012

      4. WatchListView是在AddWatchView中输入股票号后展示的,如下图所示。

View

被哪个Region承载

所在Module

WatchListView

MainRegion

Watch

clip_image014

posted @ 2009-07-13 00:49  包建强  Views(5296)  Comments(4Edit  收藏  举报