zoukankan      html  css  js  c++  java
  • (一)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

  • 相关阅读:
    Ubuntu18.04下搭建LNMP教程-超详细图文(Nginx+MySQL+PHP含各种解决报错问题)
    win10下Ubuntu18.04安装的简单教程
    Bugku-CTF加密篇之富强民主
    PHP中PHP $_POST和PHP $_REQUEST及PHP $_GET的用法及区别
    Base系列编码浅析【base16 base32 base64 base85 base36 base 58 base91 base 92 base62】
    Bugku-CTF加密篇之贝斯家族(@iH<,{bdR2H;i6*Tm,Wx2izpx2!)
    Bugku-CTF加密篇之这不是md5(666c61677b616537333538376261353662616566357d)
    Bugku-CTF加密篇之告诉你个秘密(ISCCCTF)
    攻防世界—pwn—guess_num
    攻防世界—pwn—level2
  • 原文地址:https://www.cnblogs.com/Jax/p/1522184.html
Copyright © 2011-2022 走看看