组件版本管理
任何编程语言, 当组件有依赖关系+版本管理之后, 都会遇到同样的问题, 相依性地狱
常见的问题有:
1. 循环依赖: A依赖于B, B依赖于C, C依赖于A, 相互循环依赖, 导致解析无法继续
2. 版本不兼容: A依赖于B,C1, B依赖于C2, C1与C2不兼容时, 导致系统无法运行
3. 依赖过多: 依赖的深度与广度都比较大, 导致系统过于复杂, 能性能调试带来诸多不便
比如:
1. DLL, DLL初期缺少规化, 导致当覆盖或升级系统的DLL时, 经常出现冲突的情况
2. JAR, 百家争鸣, 经常导致版本问题, 甚至象log4j,logback,jcf之间的纠缠
3. js, 复杂的页面交互, 历史遗留问题, 经常导致loader后的几个js不兼容,而作者可能是同一人
同时也有一些版本库管理器
1. APT, YUM linux上的软件包管理
2. npm nodejs的软件包管理
3. brew mac homebrew软件
4. sublime 编辑器中的package control也算是
5. maven jar包版本依赖管理
6. eclipse-plugins 插件版本管理
7. bundle ios.app, mac.app, 一种常用的app打包模式
8. 还有很多很多
从已有的解决方案来思考下这个问题
1. jar包以及java类都不会因循环依赖而导致问题, 因为依赖与运行解耦合了
考虑js.loader中的依赖, AMD因运行后才能得到依赖的module, 导致循环依赖不得不break
而CMD方案, 则提前将module设定为了{}, 少了点微不足道的功能, 但解耦合了,
从而可以将分析模块依赖与模块运行独立开来, 避免掉break
2. 可以得出这样一个结论, 一个相互依赖+版本的组件库, 通常具备以下几个功能
a) 一个打包器, 通常由语言方制定好规范, 大家相互遵守
b) 一个版本管理工具, 通常会带有命令行, 可以查看树型依赖
c) 依赖的组件, 有远程仓库, 通过id, 可以通过http直接下载, 有中央仓库, 而大公司也喜欢制造自己软件仓库
d) 敲入安装命令后, 可以自行下载元信息, 分析依赖, 下载依赖, 执行初始化
e) 软件本身不参与自己的版本管理
3. 版本不兼容的问题, 通常与实际情况有关, 很难有最佳实践, 向下兼容是比较靠谱的, 通常情况下, 一但不向下兼容, 通常都会在事后遇到依赖组件冲突问题, 除非完全统一升级
如果无法向下兼容, 那就另起炉灶吧, 换个名字, 换个命名空间, 换个全局变量
4. 提前定义好接口规范, 小版本号bugfix, 中版本增加功能, 大版本号表示大幅重构或变更
因此:
1. 在考虑是否采用版本号时, 首先要确定好, 是否有足够的精力去制造或者寻找一个合适的版本管理工具, 一个代码中央仓库, 一个有氛围的社区
2. 如果没有, 就还是单版本吧, 一个稳定的核心, 每个组件都尽量只依赖于核心, 独立成单独组件, 不相互依赖, 采用简单代码冗余, 代替复杂版本管理
一句话: 要么简单, 要么复杂, 量力选择, 针对具体情况, 做出选择
分享到:
相关推荐
Vue3作为Vue.js的最新版本,引入了许多性能优化和新特性,而ElementUI则是一个基于Vue2的组件库,但在Vue3中也能通过适配器正常工作。在"vue3+ElementUI 图片素材管理组件"这个项目中,我们将深入探讨如何利用这两者...
总的来说,这款“OCX系统组件管理工具”为开发者提供了方便、全面的OCX组件管理方案。无论是注册新组件、卸载旧组件,还是检查系统中已有的组件,都能通过简洁的界面完成,极大地提高了工作效率,减少了出错的可能性...
系统支持自定义集群配置、组件版本管理、以及集群的初始化和启动。 适用人群 大数据开发者 数据科学家 系统架构师 运维工程师 使用场景及目标 使用场景 开发和测试大数据应用程序 学习和研究大数据技术栈...
此外,QQ组件管理器还可能提供更新组件的功能,确保你所保留的组件始终与最新版本保持同步,避免因旧版组件引发的问题。同时,它也有可能提供恢复功能,如果你误删了某个重要组件,可以方便地找回。 值得注意的是,...
"Com组件管理专家 v1.2"是一款专门针对COM组件进行管理和操作的系统工具。 这款工具的主要功能集中在以下几个方面: 1. **注册与卸载**:COM组件管理专家提供了对COM组件进行注册和卸载的功能。注册是将COM组件的...
2. 组件管理:Black Duck Hub 提供了一个集中化的环境,帮助开发者和企业管理开源软件组件,包括组件版本管理、依赖关系管理和License 管理。 3. 漏洞检测:Black Duck Hub 可以检测漏洞,包括 OWASP Top 10 漏洞、...
LiquiBase数据库版本管理组件使用示例和详细介绍 1、语法简单,开箱即用 2、功能强大,满足日常数据库脚本变更需求 3、版本管理方便,每次修改都有记录 4、与项目集成,项目启动执行数据库变更,发布省去手动初始化...
**WidgetsPlayground前端组件管理系统** 是一个用于管理和组织前端组件的平台,它为开发者提供了一个高效、便捷的方式来创建、测试和复用各种UI组件。这个系统的核心是利用现代前端技术栈,包括Vue2、Vue-router和...
`dpkSPComm.lpk` 是一个Lazarus的库包文件,用于安装和管理组件。在Lazarus中,用户可以使用这个库包来导入和使用改造后的PComm组件。`SPComm.pas` 文件是PComm组件的主要源代码文件,包含了组件的所有实现细节,如...
SxS技术是Windows操作系统中的一种组件版本管理机制,主要用于解决不同应用程序对相同组件的不同版本需求,避免因组件版本冲突导致的问题。 SxS(Side-by-Side)技术的核心在于,它允许多个版本的同一组件并存于...
这些组件的版本信息对于理解和管理固件的安全性至关重要,因为安全漏洞通常只存在于特定的组件版本中。然而,实际情况中,这些组件的版本字符串可能缺失,这给版本识别带来了挑战。本文介绍了一种名为Protues的新...
总的来说,Office 2010的不同版本主要是根据用户需求和预算进行区分的,从基础的文档处理到复杂的数据库管理和团队协作,每个版本都有其独特的组件组合,以满足不同的工作场景。选择合适的版本能够帮助用户更高效地...
文档中提到了零组件和零组件版本管理,其中零组件版本是与零组件相关的所有数据版本,比如CAD模型图纸、装配文档等。数据集及版次是管理数据集不同版本的一种方式,确保用户能够访问到正确的数据集版本。 在建模...
这款组件适用于2009年至2013年间的各种通达OA(办公自动化)主程序版本,旨在提高企业对库存、销售和采购流程的管理水平,实现业务数据的有效整合和高效运作。 1. **进销存管理概念**: 进销存管理是企业管理的...
SXS(Side-by-Side)源文件是.NET Framework 3.5中的一部分,它涉及到Windows操作系统中的组件版本管理。在Windows 2012 R2系统上,.NET Framework 3.5的安装往往需要这些SXS源文件,因为它们包含了运行.NET应用程序...
8. **组件版本管理**:随着组件的更新和改进,版本管理变得至关重要。有效的版本控制策略可以帮助保持系统的稳定性和兼容性。 9. **服务级别协议(SLA)**:组件和服务提供者通常会定义SLA,以明确组件的性能指标和...
**Win10版本的ADO组件包** ActiveX Data Objects(简称ADO)是Microsoft开发的一种数据访问接口,用于在Windows环境中连接和操作各种数据源。它提供了面向对象的编程模型,使得程序员可以方便地访问和处理数据库。...
6. **版本管理和多线程**:COM还支持组件版本管理和多线程安全,确保不同版本的组件可以在同一系统中并存,且能正确处理并发访问。 总的来说,"ComDemo.rar_comDemo_vc6.0 com"是一个学习COM组件编程的实践案例,...
4. **CocoaPods组件管理**:CocoaPods是iOS开发中最流行的依赖管理工具,它可以简化第三方库的添加、更新和版本控制。在组件化项目中,每个组件可能有自己的依赖,CocoaPods能帮助管理这些依赖,避免了手动导入和...
《U8各个版本Debug版Login组件包:深入理解与应用》 在企业信息化管理领域,ERP(Enterprise Resource Planning)系统是不可或缺的一部分,其中用友U8作为国内广泛应用的ERP产品,其稳定性和功能完善性备受赞誉。...