今天跟大家分享一下我们在日常开发中并不常用的开发模式“插件系统模式”,什么叫插件从大一点的概念讲就是我们开发的软件是由很小的模块组成,每一块都能成功的装卸,使我们的软件成为一个有机体,在发生重大事故、改良优化等等的时候,我们不需要重新编译我们的系统就能很方便的进行升级替换进行使用;这样的开发模式就是插件系统开发模式;这个概念很大,每个人的技术水平不同使用的效果也是不同的;一个大型的系统,不能简简单单的用三层或者MVC来概括,我们要站在一个更高的角度去思考程序,每当我们开始一个新系统的架构设计时,我们不能总是保守的或是“封建”式的使用以往的思想模式,是否深思熟虑过这些开始模式在我们当前系统中是否可用或者说是否能发挥模式的最大效果,但是我们往往很多人,不太喜欢思考,俗话说得好:思考是前进的本质;尽量向“建筑的永横之道”一书中所讲的道理去迈进,这书不仅仅在建筑行业是经典,其实在各行各业道理都是想通的,我们不能停止脚步,我们要时刻保持热身状态,只有这样我们才不会在大难临头时,浑身无力或者由于肌肉长时间不运动导致反应迟钝;我写文章就喜欢乱扯,请大家不要见怪,本人属于一种很讨厌自以为是的那些家伙,在我的文章中我可能经常性的提到,技术不是用来炫耀的,更不是用来获得别人尊重的筹码;当你看到不喜欢的文章或者言语过于激励的时候,我们能以一种平和的心态去判断文章的价值;我们不去评价写文章的这个人的个人品德问题,只要他分享他的经验就是值得尊重的;搞程序的人不喜欢拐弯抹角,直来直往,对自己不喜欢的东西就是不喜欢,没有理由更不需要借口;但是在技术的圈子里如果人人都是这样一种心态的话,大家很难和睦相处,虽然在虚拟的计算机网络世界里,没人知道你是谁,长时间这样下去,其实从长远角度来说是不好的;习惯成自然嘛,学技术就是学做人,不管是初学者还是高手,在成长的道路中大家都是一路人,都经历过相同的历程,好了废话就不唠叨了,我们进入今天的主题;[王清培版权所有,转载请给出署名]

插件系统在很早之前就出现了,包括我们的VisualStudio开发工具的原型都是用的这种模式,我上面也说了每个人的技术水品不同使用的效果也是不同的,我跟大家分享一下我对插件模式的理解和在项目中的使用经验;我将插件系统大体抽象成下图结构:

1:

上图很清晰的描述了我们插件系统的整体执行步骤,我们将应用程序的整个生命周期进行抽象(抽象是我们程序员必备思想,要随时具备抽象化准备),不管什么应用程序都有前后执行顺序,我只是用Main表示一下,在开始执行前我们需要读取插件所在的路径然后进行插件对象的全路径保存,以便在后面运行时方便加载;到了Run开始真正的执行我们的应用程序了,我们需要根据插件的类型进行加载,插件必须具备类型的原则,用在什么地方的,好比汽车的零部件,我们有明确的规定,这里的实现我们可以用接口进行标识;当程序开始结束的时候,我们需要释放各个插件所占用的系统资源,为什么我们要手动释放这些资源呢,有的朋友会说不是用CLR的GC吗?GC只能释放托管资源,非托管资源它管不到,在我们进行P/Invoke平台调用时候,资源释放是比较复杂的,由于托管和非托管的内存分配是不同的,至于怎么释放非托管资源我这里穿插一下我比较喜欢的方法吧,当我们用非托管C++编写核心且高效的系统功能时,往往它占用的资源是非常可观的,所以当我们调用完毕后在第一时间释放是必须的,我们可以进行托管封装,在非托管内部我们定义释放资源的方法,然后在通过P/Invoke调用释放资源的非托管方式进行释放;由于这里牵扯到.NET互操作方面的知识了,这这篇文章中我们就涉及了;有兴趣的朋友可以关注本人的“《.NET程序员学互操作》”分类文章中进行详细的讲解;

大概的原理我就讲这么多了,我们来看代码怎么实现吧;

2:

在我的解决方案中,Plug是插件有关的对象;在PlugInterface里面是所有插件接口,在LoadInterface文件里面是所有加载过程中的插件,我们需要明确插件的类型,只有这样才能很好的控制插件;软件的生命周期随着需求不同而不同,这里是需要我们去收集和提取的,在应用程序的整个生命周期中我们都可以无缝的装卸插件,那是多么美妙的事情;

3:

这是本人在公司的一个项目中的实现代码,由于代码属于公司所有,所以不便于公开;其实代码没什么技术含量就看怎么用了;OK,差不多讲完了;

[王清培版权所有,转载请给出署名]

.NET简谈插件系统开发模式相关推荐

  1. 新零售分销系统开发模式设计

    新零售分销系统开发,新零售分销系统开发模式,新零售分销系统开发设计. 1.新零售系统解决开店时间较短,周期慢,十多分钟就可以开一家店,极力推荐,扫二维码这种方法.简单,方便快捷,便捷. 2.新零售系统 ...

  2. B2B2C商城系统开发模式有哪些?

    随着网购市场的成熟,产品品质及服务水平逐渐成为影响用户网购决策的重要原因,许多企业加入B2B2C多用户商城系统.尤其以像京东和天猫一样的B2B2C商城系统.电子商务的稳定发展,商城系统开发模式的探索也 ...

  3. APP系统开发模式一共有哪几种?

    App的开发基于硬件设备所运行的操作系统,现在主流的移动操作系统有苹果的iOS.google 的Android和微软的Windows Phone 8 等,主要通过运行应用的硬件和设备的其他系统约束来区 ...

  4. delphi bpl插件系统开发

    一个插件系统需要什么? 一个最小的插件系统当然需要插件本身,调用插件的容器,最后需要契约. 契约是什么呢?契约就是两个对象相互沟通的一个标准,这个标准应该统一,这样容器才能和不同的插件通讯.我们可以使 ...

  5. php 插件化开发模式,JavaScript_JavaScript插件化开发教程(六),一,开篇分析 今天这篇文章 - phpStudy...

    JavaScript插件化开发教程(六) 一,开篇分析 今天这篇文章我们说点什么那?嘿嘿嘿.我们接着上篇文章对不足的地方进行重构,以深入浅出的方式来逐步分析,让大家有一个循序渐进提高的过程.废话少说, ...

  6. 天空之城系统开发模式源码

    首先,我们认为消费级移动应用市场的核心价值点正在发生变化,重点在向服务付费方向转移.伴随社会化消费群体出现,我们企业或移动开发应用要有一定相应变化,我们认为移动价值回归商业本质.消费群体经历三个发展阶 ...

  7. 九星创客系统开发模式介绍

    最近九星创客模式在市场上受到狂热追捧,有不少读者私信我想问这个模式怎么样,今天就在这里简单说一下. 九星创客模式的原理,就是通过三三复制的团队结构,用丰厚利益吸引创客们升级,并快速的销售产品. 顾名思 ...

  8. 美丽天天秒系统开发模式与美丽天天秒系统源码分享

    美丽天天秒是一个工厂新零售渠道,总部坐落于开放之都花城广州,产业触及美妆护肤,药食同源大健康摄生,农副产品及等多个板块渠道,经过全民免费用化妆品+社交电商的形式!美丽天天秒系统开发,美丽天天秒商城 不 ...

  9. 基于区块链/Hyperledger Fabric的商品交易溯源系统开发模式搭建

    搭建该项目的开发模式主要有链码的开发模式和前后端的开发模式. 以下内容暂时没有核验,可能有bug 链码开发模式 窗口1:开启dev组件 cd /home/real/project/fabric-sam ...

最新文章

  1. 小米开源监控系统OpenFalcon应对高并发7种手段
  2. 常用正则表达式汇总(数字匹配/字符匹配/特殊匹配)
  3. UA OPTI544 量子光学13 场的量子化描述
  4. KINDLE TOUCH修复板砖过程
  5. 【面试经验分享】大厂HR在面试时,都想听你说些啥?
  6. 《象与骑象人》总结一
  7. wxWidgets:wxCheckListBox类用法
  8. 2、垃圾回收算法(标记清除算法、复制算法、标记整理算法和分代收集算法),各种垃圾收集器讲解(学习笔记)
  9. spark streaming kafka Couldn't find leader
  10. Java中的ThreadPoolExecutor类
  11. 怎样才算得上合格的程序员
  12. JAVA语言写的,用java语言写
  13. 5 SD配置-企业结构-定义-定义销售组
  14. 紫书搜索 习题7-4 UVA - 818 Cutting Chains 暴力+dfs判环+位运算
  15. 2019 Go 开发者路线图,请收下这份指南!
  16. GeoServer设置栅格影像的发布样式
  17. Bootstrap如何设置table样式
  18. OTA频发的“大数据杀熟”,想要治你不容易?
  19. python字符串前加 f 的含义
  20. 【Promise】入门-同步回调-异步回调-JS中的异常error处理-Promis的理解和使用-基本使用-链式调用-七个关键问题

热门文章

  1. 用ASP.NET编写一个在线RSS新闻聚合器
  2. 解决tomcat的undeploy
  3. Vue 自定义组件 —— slot插槽
  4. 有关凸集的证明例题_第1章引言题解1. 用定义验证下列各集合是凸集: (1) S={(X1 ......
  5. 买什么手提电脑好_现在买什么手机好?
  6. ora-01034:oracle not available
  7. Spring Cloud Config 规范 1
  8. python学习day-4 集合与函数
  9. Yii2 源码分析 - 入口文件执行流程
  10. Async/Await异步