zoukankan      html  css  js  c++  java
  • SCSF中的Module依赖方式问题

    休息了一个月,终于要重出江湖了。新工作是做Winform开发,解决方案中SCSF是很关键的部分。以前没接触过SCSF框架,对MVP模式了解有限,本文也就不对SCSF作深入的分析,只从MVP架构依赖关系上进行一些简单的分析。今天第一次接触这个框架,写得有问题的地方,大家指正。

    创建SCSF项目后就可以运行了,这个时候如果添加一个Module,那么运行时的样子完全变掉了。这跟添加的Module默认模板生成的Module类有很大关系。

            private void ShowLayoutView()
            {
                
    if (_rootWorkItem.Workspaces.Contains(WorkspaceNames.LayoutWorkspace))
                {
                    LayoutView layout 
    = _rootWorkItem.Items.AddNew<LayoutView>();
                    _rootWorkItem.Workspaces[WorkspaceNames.LayoutWorkspace].Show(layout);
                }
                
    else
                    
    throw new ModuleLoadException("LayoutWorkpsace not found");
            }
    ShowLayoutView方法把Workspaces的主窗体给覆盖掉了。这个窗体结构是在Infrastructure.Layout程序集定义的。Infrastructure.Layout相当于WebForm里的MasterPage,是一个布局。而如何很好地利用这个布局呢?

    这个时候一般有两个处理方法。

    一、修改Infrastructure.Layout

    修改Infrastructure.Layout并不是修改布局,而是修改逻辑。我的理解,按SCSF框架的原意,应该是新建的Module依赖于Infrastructure.Layout,而这里的修改Infrastructure.Layout的以上是把依赖关系反过来,由Infrastructure.Layout定义事件驱动创建的新的Module。我认为,这种方式会造成严重的依赖问题,而且事件的管理过于集中。这种方式非常像是简单工作的工作方式。但是这种开发更加符合不分层的开发方式,就直观理解上来说,要比分层容易理解。但是应该会给维护造成很大的麻烦。

    二、修改Module的加载

    Module的加载与Shell里ProfileCatalog.xml定义的Modules顺序无关,关键是要看Show方法。有Show方法,这个View就会显示,否则将不会显示。应该在新建Module程序集的Module类控制哪些View被显示。而因为新建的Module1完全不知道Module2,因此,不可能由Module来驱动Module,因此,在同一个Layout下的View应该创建在一个Module中。显示的时候_rootWorkItem.Workspaces[WorkspaceNames.RightWorkspace].Show(layout);注意,在Layout里定义了3个区域,这3个区域可以分别加载。而在事件驱动时,可以通过Close方法关闭加载的View,避免内存浪费。

    另外,在Services中定义业务逻辑部分,似乎在View中也能够被使用,这就违背了MVP的本意。数据应该在Presenter类被组织,而后被View引用。否则就是MVC而不是MVP了。

    对有多个Form以及View接口如何使用,暂时还没有深入思考,有经验的朋友请指点一二。

  • 相关阅读:
    idea 没有 persistence
    java 枚举(二) 级联关系
    java to edi 动态/静态映射
    edi to java
    C# 扩展方法
    最详细的C++对应C#的数据类型转换
    c# .Net随机生成字符串代码
    遍历结构体内部元素和值(Name and Value)
    寒假学习计划
    python os.path模块
  • 原文地址:https://www.cnblogs.com/birdshover/p/1558230.html
Copyright © 2011-2022 走看看