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

  • 相关阅读:
    CVSps 3.8 发布,CVS 资料库更改收集
    Cobra WinLDTP 3.0 发布,GUI 自动化测试
    SolusOS 2 Alpha 6 发布,桌面 Linux 发行
    微软 Windows Phone 8 原创应用大赛起航
    JAVA削足适履适应RESTful设计
    如何撰写编程书籍
    Synbak 2.1 发布,系统备份工具
    LibreOffice 4.0 RC1 发布,支持火狐兼容主题
    Rails 3.2.11 发布,修复关键安全问题
    haveged 1.7 发布,随机数生成器
  • 原文地址:https://www.cnblogs.com/jcomet/p/3105861.html
Copyright © 2020-2023  润新知