本系列博文将使用微软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、更多......
三、插件式架构设计的优点
可以说任何形式的架构设计实践工作无非就是从负责、繁琐的的研发过程中寻找一种相对方便、灵活、稳定、高扩展性的以及更加简单的一种新型技术实现方式,从而提高项目的整体开发进度和质量,减少开发人员的工作压力,间接的提高整个项目团队的工作效率。
采用插件式架构设计的优点主要体现在以下几个方面:
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 MSDNWebcast》:http://www.msdnwebcast.net/webcast/2098.aspx
架构设计并不是项简单的工作,架构设计最终的产物则是由不同的框架组件构成一套高扩展、稳定、安全、通用的开发框架平台。或许一提到架构设计,很多朋友都联想到了常用的框架组件:数据访问组件、日志组件、事务组件、消息组件、配置组件以及工具库等。然而,本系列文章的中心“插件式框架设计”已经偏离了常规的框架设计方法论,它只是一套用于改善系统功能模块组织结构,灵活开发、部署、维护的一套方法论,其中的每个功能模块的具体实现还是走常规的开发框架,它自身的职责则主要是负责根据配置文件实现系统功能模块的组装,灵活的卸载某个部件以及各部件之间如何通信等。
本篇将和大家分享基于Silverlight的B/S插件式架构设计的方法,文中的内容仅仅只是我个人知识、经验的总结,如有不妥之处还望各位读者给予指正,大家共同学习,进步。
对于Silverlight项目而言,前端系统需要后台服务接口的支撑才能完成数据通信访问、储存数据的的功能。通常需要给Silverlight前端提供相应的数据通信接口,可分为多种方式提供,常用的数据通信接口分别有Socket、HttpHandler、WebService以及WCF等方式。详细的架构模型如下图所示:
系统后台采取的技术架构为是竖向分成架构模式+横向扩展架构模式相结合,分成架构模式也就是众所周知的三层/多层架构,这里不做详细介绍;横向扩展架构模式则为支持横向业务扩展的架构模式,所有业务组件(我通常称其为:业务插件)通过实现统一的业务服务接口来扩展系统业务功能,系统框架中的业务组件容器(我通常称其为:业务插件容器)使用统一的业务服务接口灵活的管理业务组件,实现各组件之间的数据通信、事件通知、以及灵活的构造、销毁业务组件实例。总上述,这种架构模式我便称其为插件式架构设计。
插件式架构设计的框架能够灵活的横向扩展业务组件的扩展开发,管理业务组件的生命周期等,然而对于RIA应用系统来说,他只需要依赖一个或多个通信接口实现数据通信,不用关心服务后台的架构以及具体是实现细节。需要注重点则是关于系统前端的框架架构设计,一套基于Silverlight技术的插件式架构设计方法,通过插件框架灵活的加载、组合、初始化并进行托管运行系统插件模块,是我们期望达到的目的。如上所述,插件式框架的架构图大致如下所示:
系统前端的核心架构受到所采用的技术方案的影响,会演化出不同的架构设计方法和架构风格,如前面所说我们采用的是RIA的技术Silverlight来进行技术构建,那么在进行系统架构设计中定会受到Silverlight技术自身的一些限制,以至于我们的设计不能按照常规的方法,方式去实现。
Silverlight能够为用户提供高用户体验的软件界面,以及传统的Web应用实现不了的很多功能,且也有很多的局限性,系统功能模块过多导致发布出来的应用程序包(.xap)过大,导致系统运行中初始化缓慢等诸多问题。我们需要一种全新的、开放性的、高扩展性的架构体系,来缓解这种因为技术自身的缺陷造成的诸多问题,可以实现快速的启动应用程序初始化界面,根据配置动态组装系统功能模块,以及灵活的扩展新的系统功能模块等功能,我将这种架构体系命名为插件式架构体系(或许与别人口中的插件式架构有所区别)。
如上图所示,描述了插件框架的框架结构,框架由插件容器、插件契约和插件组件(业务功能插件)三大部分组成,扩展开发新的插件组件需要实现插件契约接口,以便插件容器可以灵活的控制插件组件。关于这三大组成部分的作用请查看《插件式架构设计简介》,本篇对基于Silverlight插件式架构设计方法进行了介绍,下一篇将详细介绍插件式架构设计的解决方案。
推荐资料:
《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 MSDNWebcast》:http://www.msdnwebcast.net/webcast/2098.aspx
分享到:
相关推荐
插件式的架构设计简单来说就是将一套系统中的算法和功能不同而接口相同的同类事物抽象为插件的一种架构设计方式。我更将其看作是策略模式在整个系统的应用,如果采用微服务架构,插件也可以理解为微服务中的微单元。...
支付核心子系统设计: * 抽象基础交易类型 * 多表聚合 * 订单关联 * 授权鉴权 * 业务系统请求支付,带token进入,鉴权支付核心 * 抽象4种支付类型:充值、提现、退款、转账 * 支付工具组件化 * 抽象数十种支付工具 ...
总结来说,“插件式GIS应用框架的设计与实现:基于C#和AE+9.2”是一个涵盖C#编程、ArcEngine API使用、插件架构设计与实现的综合课题。通过深入学习和实践,开发者可以掌握创建高效、可扩展GIS应用的技术和方法。
苏占玖教授在2009年系统架构师大会上分享的主题为《开放式插件系统研究》的演讲,主要围绕插件系统的概念、不同类型插件系统的架构与特点以及如何选择合适的插件架构展开。 ### 插件系统概念 插件系统,也被称作...
本文阐述“柯元旦”Android内核剖析中基于类装载器的“插件”架构。 插件的概念: 1、插件不能独立运行,而必须运行于一个宿主程序中,即由宿主程序去调用插件程序。 2、插件一般可以独安装。 3、宿主程序中可以管理...
SpringBoot插件式开发框架是基于SpringBoot框架构建的一种创新性开发模式,旨在解决系统动态扩展和模块化管理的问题。这种框架充分利用了SpringBoot的简洁、高效特性,为开发者提供了快速构建可插拔功能的能力。下面...
插件式架构是一种设计模式,它允许将软件功能分解为可独立替换和升级的模块,即插件。这种架构使得程序具有高度的灵活性和可扩展性,因为新的功能可以通过添加或更新插件来实现,而无需修改核心代码。在OPC服务器...
《插件式GIS应用框架的设计与实现:基于C#和AE+9.2》是一本深入探讨GIS(地理信息系统)开发技术的专业书籍,主要聚焦于使用C#编程语言和ArcGIS Engine(AE)9.2版本来构建插件式GIS应用的理论与实践。GIS是一种集成...
.NET插件系统开发架构是一种灵活的设计模式,它允许在运行时动态加载和卸载功能模块,从而提高了软件的可扩展性和可维护性。在本文中,我们将深入探讨.NET插件系统开发的关键概念、架构设计以及如何利用C#语言实现。...
CSI 插件机制的设计原理是基于插件式架构,插件可以根据不同的存储系统进行实现,例如块存储、文件存储、对象存储等。 知识点2: CSI 插件的编写过程 编写一个 CSI 插件需要实现 CSI Identity 服务、CSI Controller ...
在GIS开发中,插件式GIS应用框架的设计与实践是关键的一环,它极大地提高了GIS系统的灵活性、可扩展性和可维护性。 GIS应用框架是GIS系统的基础结构,它定义了系统的基本组成模块和它们之间的交互方式。设计一个...
【架构设计流程:设计备选方案1】 在架构设计中,设计备选方案是一个至关重要的步骤,它涉及到选择合适的技术栈来应对特定的业务需求。本文将深入探讨三种备选方案,并讨论架构设计中常见的误区。 **备选方案1:...
7. **框架设计**:微信插件化架构依赖于一个核心的框架,这个框架负责插件的管理和调度,包括插件的加载、卸载、更新以及它们之间的通信。框架的设计至关重要,需要兼顾性能、稳定性和扩展性。 8. **开发与调试**:...
在C#中,通过使用插件架构,开发者可以创建一个强大的平台,用户可以根据需要添加或删除功能,而不会破坏整个系统的稳定性。 总结一下,C#插件式编程架构是一种高效且灵活的设计模式,它允许在不修改主程序代码的...
Fastcms是基于SpringBoot前后端分离技术,且具有插件化架构的CMS系统,系统具有高扩展性,易维护性,可以快速搭建网站,微信小程序,是开发微信营销插件的基石。fastcms内置一套完整的CMS建站系统,完全融入微信生态...
设计良好的插件架构需要考虑到版本兼容性,确保新版本的主程序能够处理旧版本的插件,或者反之。 10. **源代码与文档** 提供源代码和相关文档对于开发者来说至关重要。源代码可以帮助理解实现细节,而文档则提供了...
#### 系统设计 以文件导入为例,假设有一个场景需要将不同格式的文件(如带分割符的文本文件、固定长度的文本文件或Excel文件)中的数据导入到数据库中。传统的方法会为每种文件格式编写一个解析类,但这种方式难以...
1. **插件架构的优势**:这种架构允许模块化开发,每个插件专注于一个特定任务,降低了复杂性。当需要支持新设备或新功能时,只需编写新的插件,而无需改动整个服务器。此外,插件可以独立更新,不影响服务器的其他...