SailingEase WinForm Framework
指导手册
下载与技术支持
概述
插件式应用程序架构
开发指引
附加功能
插件式应用程序架构

时常有朋友或者客户会问:“你这个软件是不是三层架构设计”。

实际上客户端软件的架构并不是这么划分设计的,也远远比所谓的三层架构要复杂的多,与 Web 程序在不同的页面间无状态跳转不同,客户端程序更加成一个整体,单页面 Web 应用有一些方面与之类似,不过亦有许多不同。

一个典型的基于 SailingEase WinForm Framework 的客户端应用程序结构:


我们通过一个简单的设计图进一步了解基于 SailingEase Winform Framework 的客户端程序架构:



SailingEase WinForm Framework 的核心,就是模块化。

基于 SailingEase WinForm Framework 框架的应用程序由运行时动态加载的松散耦合模块组成,模块包含代表系统不同功能的可视和非可视组件,可视组件(视图)被组合在一个外壳中(主窗口)。

宿主程序提供各种基础服务,并将这些模块级组件结合在一起;模块也可以提供与应用程序的特定功能相关的其他服务。

SailingEase Winform Framework 是“复合视图”设计模式的实现,此模式支持包含子项的视图递归结构。这些子项本身也是视图,这些视图通过某种机制组合起来(在运行时动态组合而非设计时静态组合)。

模块永远不会相互直接引用,也不会直接引用宿主。它们会利用服务、事件聚合等机制在彼此之间以及宿主之间进行通信,并响应用户操作。

使用模块来组成系统有很多好处。模块可聚合来自同一应用程序中不同后端系统的数据。此外,系统可随着时间的推移更加方便地发展演变。在系统需求发生变化而需要向系统中添加新模块时,与非模块化系统相比,模块化系统面临的冲突要少很多。而且还可以对现有模块进行独立性更强的改进,从而改善可测试性。

模块可由不同的团队开发、测试和维护。在小团队开发维护模块时,也不必加载编译整个应用程序解决方案,只需建立一个包含宿主和指定模块的精简解决方案即可。

在 SailingEase Winform Framework 中,可定义不同模块间的动态依存关系,有时一个完整的业务操作需要不同模块间协作完成,而其中有些环节不是必须的,此时我们可在缺失部分模块的情况下,正常执行完整个业务流程:


主动模式:

主动模式使用建造者模式进行实现,由业务或操作的发起模块主动控制流程,由其自身判断需要响应的模块和模块是否存在。




 被动模式:

被动模式使用事件聚合器进行实现,业务或操作的发起模块完成自身操作后,向事件聚合器发送通知,在事件聚合器中注册过的模块会收到相应的通知和数据,从而响应业务操作,响应事件聚合器的不同模块可使用多线程技术并发处理。

在被动模式中,事件的发布模块,完全不关心有哪些模块会响应事件,也不关心事件的响应结果。对于响应事件的模块来说,它们也不关心事件是由谁发布的,只需处理好相应的业务即可。




视图级别的动态依存:

举例来说,当我在用户信息模块中的用户列表画面中选择用户时,画面底部需要显示用户最近一笔订单,而这个订单信息区域(View),需要由订单模块提供,但是当订单模块不存在,或没有加载时,用户画面依然可以正常显示及使用,只是显示订单信息的位置,被隐藏了。


当用户模块和订单模块同时存在时:



选中用户列表中的用户,则在画面下方自动显示其最近订单。

显然用户模块与订单模块不仅有视图层面的融合,还有操作响应上的融合,而这些融合与调用,在 SailingEase Winform Framework 中是完全解耦合的,两个模块之间不存在任何互相引用关系。

当订单模块不存在或没有加载时,用户模块中的画面将自动调整,UI操作不会有任何影响:




模块化只是基础,除了模块化之外,作为宿主程序,通常会提供一系列的基本功能实现。

其中特别重要的有几点:主菜单/右键菜单/工具栏的融合与调度,窗口调度器、线程调度器、服务容器、事件聚合等等。

一个典型的基于 SailingEase Winform Framework 的应用程序架构

以 SailingEase WinForm Designer IDE 为例:



运行时效果:

© Copyright 2015 All Rights Reserved 滁州市升讯威软件技术有限公司