(一)RI架构分析

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

(一)RI架构分析

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

(一)RI架构分析

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

(一)RI架构分析

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

(一)RI架构分析

      在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

(一)RI架构分析

      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

(一)RI架构分析

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

View

被哪个Region承载

所在Module

WatchListView

MainRegion

Watch

(一)RI架构分析