<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td> </td>
</tr>
</table>
<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td class="content"><p> 对于一些较小的项目,具备一定经验的开发人员应该能够设计和构建出便于进行维护和扩展的应用程序。但是,随着功能模块数量(以及开发维护这些部件的人员)的不断增加,对项目实施控制的难度开始呈指数级增长。</p>
<p> SailingEase WinForm 框架为您提供了针对此问题提出的解决方案。在本文中,将对基于SailingEase WinForm 框架的复合应用程序的定义进行解释,并简要说明如何才能构建一个基于 SailingEase WinForm 框架功能的复合应用程序。 </p>
<p> <strong>传统的单一应用程序</strong></p>
<p> 传统的单一应用程序每个控件都紧密耦合在一起,UI 中存在大量用于协调各个部分的逻辑。控件之间还存在着相互依赖关系。</p>
<p> 由于存在这些依赖关系,因此无法通过某种简单的方法将应用程序分解成可在其中分别开发各个不同部分的窗体。虽然可以将所有用户控件都放在一个单独的程序集中以提高可维护性,但这种做法只是将问题从主应用程序转移到了控件程序集,治标不治本。在这种模型中,进行重大更改或引入新功能都非常困难。 </p>
<p> <strong>基于 SailingEase WinForm 框架的复合应用程序(插件式应用程序)</strong></p>
<p> 基于 SailingEase WinForm 框架的复合应用程序由运行时动态发现和构成的松散耦合模块组成。模块包含代表系统的不同垂直片段的可视和非可视组件。可视组件(视图)被组合在一个常规外壳中,可用作应用程序所有内容的宿主。复合应用程序可提供各种服务,将这些模块级组件结合在一起。模块可提供与应用程序的特定功能相关的其他服务。</p>
<p><img src="framework.jpg" width="400" height="308" /></p>
<p> 从较高的层次来看,复合应用程序是“复合视图”设计模式的实现,此模式可描述包含子项的视图的递归 UI 结构,这些子项本身也是视图。这些视图然后通过某种机制组合起来 — 通常是在运行时而非设计时静态组合。</p>
<p> 模块会影响在其中创建主复合视图(也称为外壳)的视图。模块永远不会相互直接引用,也不会直接引用外壳。相反,它们会利用服务在彼此之间以及与外壳之间进行通信,以响应用户操作。</p>
<p> 使用模块来组成系统有很多好处。模块可聚合来自同一应用程序中不同后端系统的数据。此外,系统可随着时间的推移更加方便地发展演变。在系统需求发生变化而需要向系统中添加新模块时,与非模块化系统相比,模块化系统面临的冲突要少很多。而且还可以对现有模块进行独立性更强的改进,从而改善可测试性。最后,模块可由不同的团队开发、测试和维护。</p>
<p><img src="SSR sc.jpg" width="306" height="386" /><br />
一个典型的基于 SailingEase WinForm框架的应用程序</p>
<p> <strong>创建基于 SailingEase WinForm 框架的应用程序</strong></p>
<p> <strong>引导程序和容器</strong></p>
<p> 使用 SailingEase WinForm 框架构建复合应用程序时,首先必须初始化几个核心复合服务。这就引入了引导程序。它可以执行发生复合所需的全部功能。在许多方面,它都类似于应用程序的 Main 方法。</p>
<p> 对于容器,指的是控制反转 (IoC) 容器/依赖关系注入 (DI) 容器。容器在应用程序中起着关键作用。容器存储着应用程序中使用的所有应用程序服务。它负责在需要的位置注入这些服务。</p>
<p> 在配置容器的同时,还会自动注册几个核心服务(如事件聚合器),基本的引导程序允许您覆盖其中的任何服务。例如,自动注册 ImoduleLoader 服务。如果在引导程序中覆盖 ConfigureContainer 方法,即可注册自己的模块加载程序。</p>
<p><img src="ConfigureContainer.jpg" width="692" height="415" /></p>
<p> <strong>模块的加载</strong></p>
<p> 在引导程序中,通过覆盖方法 GetModuleCatalog 即可加载所需的模块,除了通过 ModuleCatalog 的 AddModule 方法来加载模块之外,可以在此实现其它任何所需的模块加载方式。</p>
<p><img src="GetModuleCatalog.jpg" width="707" height="144" /></p>
<p><strong>定义并实现一个模块</strong></p>
<p> 在基于 SailingEase WinForm框架的应用程序中,模块是复合应用程序的分离单位,可将其部署为单独的程序集(尽管并非必需)。模块包含了大部分的功能。</p>
<p><img src="module sc.jpg" width="310" height="227" /> </p>
<p> 这是一个基于 SailingEase WinForm框架的应用中的一个模块,StartPageModule.cs是实现 IModule 接口的类。此接口仅包含一个方法,称为 Initialize。如果把引导程序看作应用程序的 Main 方法,那么此处的 Initialize 方法就是模块的 Main。</p>
<p> 在该模块的构造函数中,我们取得 IUnityContainer 容器,事件聚合器 IEventAggregator ,以及工作区服务 IWorkbenchService。</p>
<p><img src="StartPageModule ctor.jpg" width="617" height="127" /></p>
<p> IUnityContainer,IEventAggregator和IWorkbenchService它们究竟从何而来?我是否要将逻辑硬编码到模块的初始化代码中?</p>
<p> 答案是“否”。加载模块时,SailingEase WinForm框架自动将模块需要的服务从容器中解析出来,注入到模块的构造函数中,如果我们需要在模块初始化时获得其它服务,只需在构造函数中直接加入参数即可。</p>
<p> 在该模块的 Initialize 方法中,我们做了两件事:注册导航项到应用程序的外壳(主窗口)中,订阅应用程序中的事件。</p>
<p><img src="Initialize.jpg" width="367" height="140" /></p>
<p><strong>在不同的模块间发布/订阅事件</strong></p>
<p> SailingEase WinForm 框架为您提供了事件聚合服务,在传统的单一应用中,不同功能点之间的事件订阅是直接的引用与依赖关系,而SailingEase WinForm 框架通过事件聚合服务,使得事件的订阅者,与发布者完全解耦合,不存在任何引用与依赖关系。</p>
<p> 传统的应用程序事件发布订阅:</p>
<p> 功能A发布事件 ProjectOpenedEvent ,功能B订阅此事件时,必须在编码过程中依赖,引用功能A的程序集或者类。</p>
<p> 基于 SailingEase WinForm 框架的事件发布订阅:</p>
<p> 模块B获得事件聚合服务,向事件聚合器订阅事件 ProjectOpenedEvent,当有其它事件发布者,如模块A,向事件聚合器发布事件 ProjectOpenedEvent时,模块B将得到通知从而执行相关代码。</p>
<p> 模块A与模块B,或更多的此事件订阅、发布者,不存在任何依赖,引用关系,它们通过事件聚合服务发布,�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
SailingEase WinForm Framework (DEMO).zip (52个子文件)
Shell.exe.config 2KB
Shell.exe 3.47MB
Microsoft.Practices.ObjectBuilder2.dll 75KB
Microsoft.Practices.EnterpriseLibrary.Common.dll 183KB
Microsoft.Practices.Unity.dll 75KB
Data
startpage
mdiwindow.jpg 18KB
introduction.html 11KB
vistatable_bl.gif 93B
GetModuleCatalog.jpg 48KB
StartPageModule ctor.jpg 23KB
Infrastructure.html 3KB
navigationService.jpg 30KB
support.html 2KB
framework.png 70KB
wizard.jpg 20KB
IWorkbenchService.jpg 33KB
vistatable_br.gif 117B
ConfigureContainer.jpg 80KB
Initialize.jpg 12KB
vistatable_t.gif 72B
vistatable_tl.gif 84B
module sc.jpg 26KB
vistatable_r.gif 72B
ExtendedWeb.html 2KB
viewmenuitem.jpg 19KB
style.css 419B
publishevent.jpg 18KB
vistatable_tr.gif 85B
SubscribeEvent.jpg 38KB
logo.png 123KB
framework.jpg 31KB
start.html 5KB
vistatable_l.gif 77B
SSR sc.jpg 41KB
dot.png 22KB
style_en.css 222B
vistatable_b.gif 73B
controlsdemo
selistview sc folder.jpg 56KB
ComboBox sc.jpg 71KB
DataGridView sc folder.jpg 35KB
imagelistview.html 2KB
DataGridView.jpg 23KB
listview.html 2KB
ImageListViewStandardRenderer_DrawItemContent.jpg 68KB
style.css 419B
DataGridViewRendererTheme sc.jpg 63KB
ImageListViewLayoutManager.jpg 16KB
datagridview.html 2KB
ComboBox.jpg 43KB
ImageListViewStandardRenderer.jpg 55KB
misc.html 2KB
Microsoft.Practices.EnterpriseLibrary.Caching.dll 115KB
共 52 条
- 1
升讯威在线客服系统
- 粉丝: 112
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 1998-2014年中国工业企业地理信息位置数据(经度纬度、行政区划代码、区县名称)
- 上市企业组织韧性(1990-2022)原始数据测算代码测算结果面板数据excel及stata版本
- 上市公司企业声誉数据2000-2021含资产负债利润表每股指标发展偿债能力管理层治理审计
- creator13.0.2-Qt5.15.13so文件
- 2021年增值贸易TiVA数据库相关指标数据
- 更新2022-2000上市公司数据、上市公司企业数据大全
- JAVA源码Java游戏中斜视角编辑器及引擎源代码
- 数字技术IPC专利分类号对应表
- JAVA源码Java游戏使命的召唤源码
- 上市公司透明度综合指标TRANS计算Stata代码(附2003-2022年数据)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页