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 |