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接口如何使用,暂时还没有深入思考,有经验的朋友请指点一二。

  • 相关阅读:
    jquery 序列化form表单
    nginx for windows 安装
    nodejs idea 创建项目 (一)
    spring 配置 shiro rememberMe
    idea 2018 解决 双击shift 弹出 search everywhere 搜索框的方法
    redis 在windows 集群
    spring IOC控制反转和DI依赖注入
    redis 的安装
    shiro 通过jdbc连接数据库
    handlebars的用法
  • 原文地址:https://www.cnblogs.com/birdshover/p/1558230.html
Copyright © 2011-2022 走看看