[老文章搬家] 插件化软件设计的头疼问题以及可能的解决思路
11年的文章,当时在做系统集成,实际上当时的思路到现在我还在琢磨,只不过后来就不做系统集成了,也一直没机会深入下去解决这个问题。
==== 正文 ====
一直以来做的项目中有很大一部分工作量都是有关集成设备的工作。为了方便扩展以支持更多厂家的设备,但在这个过程中遇到了非常头疼的问题,在这里我把问题描述一下,欢迎大家来探讨。
问题描述:
所谓设备集成,多数情况下可以简化为SDK的集成(这个比较方便,有时候我们宁愿直接集成协议,但是厂家有厂家的考虑)。针对这种情况,我们的系统采用了比较典型的插件式设计思路,把功能大体一致的设备封装为统一接口的动态共享库,运行时根据数据库配置动态加载调用,同时宿主软件本身也提供了一套接口以便下层动态库来回调获得必要的信息。
我把问题描述到这个程度,估计很多人已经在窃笑了——是的,就是动态库版本问题……
应该说在多数情况下这种插件机制可以很好的应付设备集成需求,并且可以很容易的跨平台实现(这很重要),但是有一种情况,就是在一个进程中使用同一个共享库,却妄图加载两个版本。这时候情况就变得非常混乱。看图:(工具简陋,箭头我没画,大概意思应该都明白)
针对这个问题我曾经尝试用两个方法解决过:
方法一:
方法二:
目前这个问题我还没有太好的解决方案,只能就事论事针对项目的特点逐个解决。
转载于:https://www.cnblogs.com/legendlee/p/5545611.html
[老文章搬家] 插件化软件设计的头疼问题以及可能的解决思路相关推荐
- 结构化软件设计的具体步骤
结构化软件设计的具体步骤 1.从需求分析阶段的数据流图出发,指定几个方案,从中选择合理的方案. 2.采用某种设计方法,将一个复杂的系统按功能划分成模块的层次结构 3.确定每个模块的功能及模块间的调用关 ...
- Shadow插件化框架设计——replugin原理(架构师进阶之旅)
DroidPlugin原理解析 从系统设计的角度,组件和窗口的逻辑实体都存在于系统服务,比如Activity创建后,其逻辑控制主体在AMS,对于窗口,其逻辑控制主体在WMS android将逻辑主体放 ...
- 算法设计与分析:二叉树问题的解决思路
文章目录 前言 二叉树的基本思想 简单题 合并二叉树 二叉树的坡度 中等题 二叉树剪枝 总结 前言 二叉树是数据结构中使用频率非常高的一种了,凭借高实用性和效率成为数据结构中必须攻克的一环.关于二叉树 ...
- 软件工程:结构化软件设计方法 VS 面向对象软件设计方法
一.基本概念 1.结构化方法 结构化方法是一种传统的软件开发方法,它是由结构化分析.结构化设计和结构化程序设计三部分有机组合而成的. 基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向 ...
- Ubuntu安装软件或更新过程中出现问题,一些解决思路
Ubuntu在安装软件或者进行系统更新时,可能会遇到一些问题.尤其是Linux内核版本升级时极有可能造成一些错误,甚至造成系统不能启动.以下是我在使用Ubuntu过程中会遇到的问题,依照网络上提供的方 ...
- iOS 上的插件化设计
????????关注后回复 "进群" ,拉你进程序员交流群???????? 转自:掘金 ZenonHuang https://juejin.cn/post/697962703724 ...
- Android插件化原理解析——ContentProvider的插件化
目前为止我们已经完成了Android四大组件中Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特点定制了不同的插件化方案:那么对于Co ...
- ContentProvider插件化
ContentProvider插件化 目前为止我们已经完成了Android四大组件中Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特 ...
- 插件化原理解析——ContentProvider的插件化
目前为止我们已经完成了Android四大组件中Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特点定制了不同的插件化方案:那么对于Co ...
- 【Android 插件化】恶意软件判定规则 | 恶意软件的范围定义
文章目录 一.恶意软件判定规则 二.恶意软件的范围定义 一.恶意软件判定规则 在 [Android 插件化]基于插件化的恶意软件的加载策略分析 ( 自定义路径加载插件 | 系统路径加载插件 | 用户同 ...
最新文章
- 解决数据库读写分离(转)
- Windows7查看本地Java安装是否成功和路径的方法
- Python基础学习篇-2-数值运算和字符串
- 服务端I/O性能:Node、PHP、Java、Go的对比
- “Python编程及大数据应用”课程教师(厦门)寒假研修班
- mm1排队系统仿真matlab实验报告,MM1排队系统仿真matlab实验报告.doc
- 从数据库读取数据后输出XML
- 简述隐含表法化简状态步骤
- WAP PUSH 技术
- 湖北省武汉市谷歌高清卫星地图下载
- npm安装vant(有赞UI)框架 - cmd篇
- airtest web 录制滑块_AirTest学习四,录制Web测试脚本
- 通俗理解逻辑删除和物理删除的区别
- Windows 11 中打印时提示打印机不兼容,都来是“+”惹的祸
- 打印1000-2000年的闰年
- Gym - 101492 F. Hitting the target(几何)
- 阿里云服务器docker安装网心云容器魔方
- Data-driven methods for solving algebra word problems论文阅读
- 在Linux服务器上解压rar压缩文件
- electron 自动更新 热跟新
热门文章
- Win10下VB6.0开发之串口通信基础(一)控件属性篇
- 简述中断的整个过程,谈谈你对中断在计算机中作用的理解。
- 抓取html的地址怎么写,跪求一个获取URL地址html代码的写法
- Zephyr在编译时将二进制文件转化成c语言数组
- 计算机编码详解_什么是计算机编码?计算机编码的起源与操作系统是如何解码的。
- 招聘网站数百万条敏感数据泄露,简历、×××扫描件统统曝光
- springboot Hello World探究
- [4/10]指定结进程名称的命令taskkill.exe
- zabbix源分支---zabbix-rpm
- 【转】Build Your own Simplified AngularJS in 200 Lines of JavaScript