EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 667|回复: 0
打印 上一主题 下一主题

[架构模式] 基于插件式的开发框架

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12406

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-10 10:54:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
插件式以其身优势广为开发者所喜爱,本人参与开发过的几个项目都用到了插件式的概念。
最近几天不是很忙, 抽空重新梳理了一下逻辑, 将业务部分剥离, 便有了此版的插件式的开发框架。
希望通过此代码能与大家交流技术,探讨问题,也希望大家提出宝贵意见。

- 概念
插件: 插件是可独立完成某个或一系列功能的模块.通常插件由宿主程序加载,不能独立运行。
宿主: 宿主是承载插件运行的环境,为插件提供基本服务。通常插件由宿主程序管理和控制。
插件式: 通常是由开发人员编写宿主程序,并预先定义好系统提供基本服务接口和插件接口。然后由其他开发人员根据系统插件接口编写插件功能。通常插件以一个独立功能模块的形式出现。对于宿主程序来说并不知道插件的具体功能,通常宿主启动时检索插件信息,并根据预定的插件接口装载插件。

- 优势
增强系统扩展性: 在系统发布后可在不必重新编译系统的前提下按需对系统功能进行扩充。
易维护及复用性: 插件通常为独立的功能模块易于管理与维护,并可在多个业务系统中重用。

如果了解了以上这些信息那么就不难阅读这份源码了。(点击下载 addin_framework_perview2.rar)
声明: 此代码仅为学习之用, 可自由转载或使用, 但希望使用者尽量保留文件头部信息以保证后续开发者能及时反馈. 本人不保证代码的正确性及安全性.   

项目结构
  • Addin 目录为框架核心代码
  • Addin.HostDemo 目录为宿主实现(演示)
  • Addin.PackageDemo 目录为插件实现(演示)
  • Addin.Services 目录为基础服务接口(演示)

主要类型及接口
  • IHost 宿主接口
  • PackageHost 插件宿主抽象类(此抽象类实现IHost接口,并提供插件管理功能. 定制基于业务的插件宿主应从此类继承)
  • IPackageServiceProvider 插件服务提供者接口(由此接口实现者提供插件服务)
  • DictionaryServiceProviderAdapter IServiceProvider接口适配器(提供从Dictionary到IServiceProvider的转换)
  • IPackageProvider 插件提供者接口(由此接口实现者提供插件源)
  • FilePackageProvider 文件插件提供者实现
  • IPackageManager 插件管理器接口
  • PackageManager 插件管理器实现
  • IPackageController 插件控制器接口
  • PackageController 插件控制器实现
  • IPackage 插件接口(由此接口实现插件功能)

目录结构
view source
print?

__

│  

│  Addin.sln

│  

├─Addin

│  │  Addin.csproj

│  │  IConfigurationInitialize.cs

│  │  IHost.cs

│  │  IPackage.cs

│  │  IPackageController.cs

│  │  IPackageProvider.cs

│  │  IPackageManager.cs

│  │  IPackageServiceProvider.cs

│  │  PackageController.cs

│  │  PackageControllerCollection.cs

│  │  PackageDescription.cs

│  │  PackageHost.cs

│  │  PackageManager.cs

│  │  

│  ├─adapter

│  │      DictionaryServiceProviderAdapter.cs

│  │         

│  ├─common

│  │      CancelEventArgs.cs

│  │      EventArgs.cs

│  │      

│  ├─configuration

│  │      AddinSection.cs

│  │      

│  ├─provider

│  │      FilePackageProvider.cs

│  │      

│  └─utility

│          Guard.cs

│         

├─Addin.HostDemo

│  │  Addin.HostDemo.csproj

│  │  Addin.HostDemo.csproj.user

│  │  FormHostManager.cs

│  │  HostForm.cs

│  │  HostForm.Designer.cs

│  │  HostForm.resx

│  │  Program.cs

│  │  

│  ├─adapters

│  │      CommandBarItemCollectionAdapter.cs

│  │      CommandBarManagerAdapter.cs

│  │      CommandBarMenuAdapter.cs

│  │      StatusBarAdapter.cs

│  │              

│  ├─packages

│  │      Addin.PackageDemo.dll

│  │      Addin.PackageDemo.dll.config

│  │      

│  └─Properties

│          AssemblyInfo.cs

│         

├─Addin.PackageDemo

│  │  Addin.PackageDemo.csproj

│  │  App.config

│  │  Form1.cs

│  │  Form1.Designer.cs

│  │  Form1.resx

│  │              

│  └─Properties

│          AssemblyInfo.cs

│         

└─Addin.Services

    │  Addin.Services.csproj

    │  ICommandBar.cs

    │  ICommandBarCollection.cs

    │  ICommandBarItem.cs

    │  ICommandBarItemCollection.cs

    │  ICommandBarManager.cs

    │  ICommandBarMenu.cs

    │  ICommandBarSeparator.cs

    │  IContainer.cs

    │  IStatusBar.cs

    │  

    └─Properties

            AssemblyInfo.cs

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-27 11:45

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表