RI中的数据都是基于XML的,散落在以下几个地方:


StockTraderRI.Modules.Market模块:/Data:Market.xml和MarketHistory.xml



StockTraderRI.Modules.News模块:/Data:News.xml



StockTraderRI.Modules.Position模块:/Data:AccountPositions.xml


      我将其转换为DB中的同名表,它们之间的关系如下所示:


      注意到,以AccountPositions表为核心,通过TickerSymbol字段进行外键连接,AccountPositions和Market表之间是1对1的关系;而和MarketHistory、News表之间都是1对多的关系。

      让我们回到程序中,再观察一下Shell主程序中的模块加载顺序(同时参照下图):


protected override IModuleCatalog

GetModuleCatalog() {

var

catalog =

new ModuleCatalog

(); catalog.AddModule(

typeof

(

MarketModule

)) .AddModule(

typeof

(

PositionModule

),

"MarketModule"

) .AddModule(

typeof

(

WatchModule

)) .AddModule(

typeof

(

NewsModule

));

return

catalog; }



      就是说,MarketModule的加载先于PositionModule。这是因为,在程序运行时,先加载PositionSummaryView这个GridView是毋庸置疑的,但是默认会选中其中的第一笔数据,那么在TrendLineView中必须有相对应的一笔数据显示出来,所以,MarketModule(也就是TrendLineView)的加载要先于PositionModule。


      一般而言,如果RI是由一个人完成的,那么他会根据用户操作的顺序来实现,那么第一个要完成的应该是Position模块的PositionSummaryView和PositionPieChartView(毕竟是用户最先看到的GridView,并根据这些数据进一步进行操作)。

      但是,如果我也按照这样的顺序来一边写一边向大家介绍RI,就展示不出Prism的优点了,即各个Team可以独自开发不同的模块,然后再无缝整合在一起。因此,在接下来的几章中,我会按照MarketàPositionàWatchàNews的顺序来逐一介绍并添加模块,并在Market完成后,介绍Prism下单元测试的具体操作。