本系列博文将使用微软RIA技术解决方案Silverlight以及扩展性管理框架Managed Extensibility Framework(MEF),以插件式架构设计为导线,分享本人在从事基于微软Silverlight技术构建的RIA系统中实施插件式系统架构设计的相关技术和经验。鉴于本人能力有限,如有不妥之处请各位朋友指正,大家共同学习、进步,谢谢!

  软件的工业化使得软件复用已经从通用类库进化到了面向领域的应用框架。应用框架强调的是软件的设计重用性和系统的课扩展性,以缩短大型应用软件系统的开发周期,提高开发质量。应用软件开发的未来就在于提供一个开放的体系结构,以方便中间件的选择、组装和集成,应用框架的重用已成为软件开发生产中最有效的重用方式之一。面对这种发展趋势,呼之欲出的便是一种全新的、开放性的、高扩展性的架构体系,这里我将其命名为插件式架构(或许与别人口中的插件式架构有所区别)。

一、插件式架构设计概述

  插件式架构设计近年来非常流行,其中Eclipse起了推波助澜的作用,提到插件式就会不由自主的想到饿Eclipse。其实插件式设计并不是什么新事物,早在几十年前就有了。像X-Server就是基于插件式设计的,除了核心功能外,它所有的扩展功能和设备驱动都是以插件方式加入进来的。

  基于插件的设计好处很多,把扩展功能从框架中剥离出来,降低了框架的复杂度,让框架更容易实现。扩展功能与框架以一种很松的方式耦合,两者在保持接口不变的情况下,可以独立变化和发布。公开插件接口,让第三方有机会扩展应用程序的功能,有财大家一起发。另外,还可以让开源与闭源共存于一套软件,你的插件是开源还是闭源,完全由你自己决定。基于插件设计并不神秘,相反它比起一团泥的设计更简单,更容易理解。各种基于插件设计的架构都有自己的特色,但从总体架构上看,其模型都大同小异。

  插件式架构设计中主要包括:插件框架、插件契约(服务)以及插件组件三部分组成。

  1、插件框架:组织和管理系统插件的下载、装载、组合、实例化以及销毁,并提供整套完整的与后台服务通信的操作接口等。

  2、插件契约(服务):插件契约以服务接口的形式存在,系统的所有插件全部通过实现系统框架统一的接口规范,偏于有效的组织、管理插件对象。

  3、插件组件:插件组件既为具体的插件程序,实现了插件契约服务的一个独立的程序。

  对于插件式应用框架的开发,关键是要识别出框架中的通用点和扩展点。基于这个原则,对于开发插件式应用框架的方法和步骤主要分以下三点:

  1、分析并提取出框架中的通用点

  2、分析并提取出框架中的扩展点

  3、在应用框架的扩展点处根据系统配置信息动态加载实际需要的程序集(应用插件),动态创建实例对象并调用其服务。

二、插件式架构技术选型

  在RIA(Silverlight、Flex等)技术发热的现在,很多企业已经开始使用RIA技术解决方案进行企业管理系统建设,采用RIA技术进行系统建设的最大优点就是将后台处理服务程序和前台UI展现实现了完全分离,且后台实现也不受到任何技术活平台的限制,使系统的整体建设灵活性增强、以及提高对其他外部系统的集成能力。之所里选择微软RIA技术解决方案Silverlight技术来实现插件式系统架构,主要取决于以下优点:

  1、Silverlight发布的动态连接库(.dll)或程序包(.xap)更容易实现插件式架构。

  2、Silverlight支撑Socket的及时消息通信。

  3、Silverlight开发与Blend界面设计完美结合,更容易、快捷的实现UI风格。

  4、基于HttpService/WebService/WCF的分布式通信服务借口,提高多系统异构集成能力。

  5、应用统一的系统样式,更容易、方便的实现系统多UI风格。

  6、友好的全屏模式及独特的OOB(Out-Of-Browser)模式支持。

  7、丰富的动画效果以提供完美的用户体验。

  8、跨平台、跨浏览器支持。

  9、更多......

 三、插件式架构设计的优点

  可以说任何形式的架构设计实践工作无非就是从负责、繁琐的的研发过程中寻找一种相对方便、灵活、稳定、高扩展性的以及更加简单的一种新型技术实现方式,从而提高项目的整体开发进度和质量,减少开发人员的工作压力,间接的提高整个项目团队的工作效率。

  

  采用插件式架构设计的优点主要体现在以下几个方面:

  1)、降低系统各模块之间的互依赖性

    在进行插件式开发中,任何一个系统功能模块、通用用户界面以及最小的图标等都可以插件的方式进行开发,从而提高了通用功能模块的重用性;各个功能进行独立开发,相互之间不存在互依赖性,使各个独立的功能都可以单独运行,也可以通过插件框架进行托管运行,从而提高了整个系统的灵活性;对于修改功能模块也不会影响到其他插件模块的正常运行,降低了系统的维护难度,提高了系统的可扩展性。 

 

  2)、系统模块独立开发、部署、维护

    每个功能模块都可以按照插件契约服务接口所定义的服务接口以及相关的元数据的形式当做一个插件进行独立开发,开发完成编译后可独立运行,也可通过插件框架进行托管运行。理论上插件组件是不应该可以单独运行的,按照插件式架构原理来说,必须是通过插件管家托管才能运行。实际的开发中或许会因为各种的业务需求不同而不同,具体应该如何对插件开发进行约束,还得结合实际项目需求而定。

  3)、根据需求动态的组装、分离系统

    每个功能模块都可以当做一个插件进行开发,通过统一的配置文件维护插件包的部署信息,插件框架可根据活动情况动态从服务器上下载相应的xap插件包或者是.dll的动态库文件到客户端进行插件初始化创建,插件到框架的组合等,插件框架能够灵活的管理各个插件实例以及插件之间的通信机制,也支持插件的卸载。

三、插件式架构组件(MEF)

  在MEF之前,人们已经提出了许多依赖注入框架来解决应用的扩展性问题,比如OSGI 实现以Spring 等等。在 Microsoft 的平台上,.NET Framework 自身内部包含组件模型和 System.Addin。同时存在若干种开源解决方案,包括 SharpDevelop 的 SODA 体系结构和“控制反转”容器(如 Castle Windsor、Structure Map、Spring.Net 以及Unity)。

  虽然.NET平台下,包括MS在内的各种方案已经遍地开花,但是MEF是第一个随着CLR发布的解决方案。

官方说法: Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,它是一系列特性的集合,包括依赖注入(DI)以及Duck Typing等。MEF为开发人员提供了一个工具,让我们可以轻松的对应用程序进行扩展并且对已有的代码产生最小的影响,开发人员在开发过程中根据功能要求定义一些扩展点,之后扩展人员就可以使用这些扩展点与应用程序交互;同时MEF让应用程序与扩展程序之间不产生直接的依赖,这样也允许在多个具有同样的扩展需求之间共享扩展程序。

  本系列文章所讨论的插件式框架的设计采用.NET 4.0中的MEF框架作为核心组件,MEF的详细可查看我写的《MEF程序设计指南》系列博文。

推荐资料:

  《MEF程序设计指南》:http://www.cnblogs.com/beniao/archive/2010/08/11/1797537.html

  《Silverlight动画开发教程》:http://www.cnblogs.com/beniao/archive/2010/04/04/1703992.html

  《一步一步学Silverlight教程》:http://www.cnblogs.com/Terrylee/archive/2008/03/09/Silverlight2-step-by-step-Tutorials.html

  《Silverlight MSDN Webcast》:http://www.msdnwebcast.net/webcast/2098.aspx

版权说明

本文属原创文章,欢迎转载且注明文章出处,其版权归作者和博客园共有。

作      者:Beniao

文章出处:http://beniao.cnblogs.com/  或  http://www.cnblogs.com/

转载于:https://www.cnblogs.com/beniao/archive/2010/12/03/1778842.html

插件式架构设计实践一:插件式系统架构设计简介相关推荐

  1. 设计高性能大并发WEB系统架构注意点

    设计高性能大并发WEB系统架构注意点 第01:大型架构的演进之路 第02(上):分布式缓存 第02(下):分布式缓存 第03:分布式消息队列 第04:分布式数据存储 第05:分布式服务框架 第06:高 ...

  2. 【软考系统架构设计师】2021年下半年系统架构设计师考后心得

    [软考系统架构设计师]2021年下半年系统架构设计师考后心得 [软考系统架构设计师]2021年下半年系统架构设计师考后心得 [软考系统架构设计师]2021年下半年系统架构设计师考后心得 前言 第一部分 ...

  3. 蓝牙架构(4)—— 2 蓝牙系统架构 (2.0 核心系统架构)

    Vol 1架构和术语概述 Part A 2 蓝牙系统架构 Agenda: 2.0 核心系统架构. 2.0.1 蓝牙BR/EDR最小系统. 2.0.3 蓝牙BR/EDR/LE最小系统. 2.0.4 蓝牙 ...

  4. 插件式架构设计实践:插件式系统架构设计简介

    本系列博文将使用微软RIA技术解决方案Silverlight以及扩展性管理框架Managed Extensibility Framework(MEF),以插件式架构设计为导线,分享本人在从事基于微软S ...

  5. 架构设计实践思路:什么是架构,怎么画架构图?

    点击蓝色字体"肉眼品世界",关注公众号 改变,从一点一滴积累开始 作者丨胡斌 策划丨小智 本文是架构设计实践五部曲系列文章的第一篇,架构与架构图.本文将对架构作深入的阐释,并教你什 ...

  6. 天泉湖酒店式养生社区服务中心漏电火灾监控系统的设计与应用

    安科瑞 顾锡君 摘要:介绍天泉湖酒店式养生社区服务中心项目,采用安科瑞剩余电流式电气火灾探测器,就地组网方式,通过现场总线通讯远传至后台,从而实现剩余电流式电气火灾监控系统的搭建,完成对现场配电回路的 ...

  7. android人脸识别应用架构,基于Android平台人脸识别系统的设计与实现

    摘要: 伴随着社会信息化,自动化的发展,以及科技的进步,未来将是移动互联网的时 代,为适应移动互联网的发展智能化的小型移动终端将是未来的发展趋势.与此同时人们对信息的安全性要求不断的提高,高自动化和高 ...

  8. 点餐系统架构模型_餐馆点餐系统课程设计

    ================ 精选公文范文, 管理类, 工作总结类, 工作计划类文档, 欢迎阅读下载 ============== -------------------- 精选公文范文,管理类, ...

  9. 【广告架构day2】新浪广告系统架构的演进之路:服务化改造

    按:广告系统是互联网商业化过程中核心系统之一,像今日头条.百度等,大头利润都靠卖广告.广告系统有何独特的特性?可从中多学习.本文来自新浪徐挺的分享. 摘要 其实新浪很早就开始研究广告系统了,根据Use ...

  10. 亿级流量网站架构核心技术_关于大型网站系统架构你不得不懂的10个问题

    来自:JavaGuide(微信号:JavaGuide) 下面这些问题都是一线大厂的真实面试问题,不论是对你面试还是说拓宽知识面应该都很有帮助.之前发过一篇8 张图读懂大型网站技术架构 可以作为不太了解 ...

最新文章

  1. Qt:Qt实现网页自动刷新工具
  2. 用python实现朴素贝叶斯算法_朴素贝叶斯算法 python 实现
  3. 输出三角形字符阵列 (15 分)
  4. regrex pattern
  5. 利用 Python 插件 xlwings 读写 Excel
  6. caffe中Makefile.config配置
  7. 量化指标公式源码_通达信博尔量化指标 看了就明白 源码
  8. 计算机硬盘序列号是空白,为什么小弟我的获取硬盘序列号的代码,在有些电脑下没法获取到硬盘序列号,即返回值为空白...
  9. 李宇春-唐人街无损品质mp3-flac音乐歌曲网盘免费下载
  10. 在不损坏硬盘数据情况下,MBR格式转GPT格式,手动创建EFI和MSR分区,安装win8/win10
  11. 【摘录】模拟物流快递系统程序设计
  12. 【优秀课设】基于OpenCV+MediaPipe的手势识别(数字、石头剪刀布等手势识别)
  13. Chrome浏览器关闭地址栏的搜索记录
  14. 小程序转uni-app——动态转换样式
  15. Swift 复数变量定义
  16. [解决方案] LaTeX公式中的多行大括号 (如涵盖多个不等式)
  17. POI Word 模板 文字 图片 替换
  18. 零基础入门学Python(十二)—— 魔法方法(下)
  19. CMD命令窗口全屏设置
  20. 线性回归模型和非线性回归模型的区别是

热门文章

  1. JS设置cookie,删除cookie
  2. 聊聊编程那些破事-0.Prehistory
  3. 什么是 XDoclet?
  4. notepad拼心形_配置基于NotePad++工具下的C#开发环境
  5. npm 编译打包vue_从零到一教你基于vue开发一个组件库
  6. 启动不起来_电脑启动不起来该怎么办
  7. Mybatis mapper代理Dao开发
  8. joomla tab 扩展_如何使用扩展功能扩展Joomla网站的功能
  9. 分布式ID | 这六种分布式ID生成方法,总有一款适合你
  10. Struts Action 控制器