`
seavers
  • 浏览: 170117 次
  • 来自: ...
社区版块
存档分类
最新评论

组件版本管理

阅读更多
组件版本管理

任何编程语言, 当组件有依赖关系+版本管理之后, 都会遇到同样的问题, 相依性地狱

常见的问题有:
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. 如果没有, 就还是单版本吧, 一个稳定的核心, 每个组件都尽量只依赖于核心, 独立成单独组件, 不相互依赖, 采用简单代码冗余, 代替复杂版本管理

一句话:  要么简单,  要么复杂,  量力选择, 针对具体情况, 做出选择


















分享到:
评论

相关推荐

    LiquiBase数据库版本管理组件使用示例

    LiquiBase数据库版本管理组件使用示例和详细介绍 1、语法简单,开箱即用 2、功能强大,满足日常数据库脚本变更需求 3、版本管理方便,每次修改都有记录 4、与项目集成,项目启动执行数据库变更,发布省去手动初始化...

    K3远程组件测试提示“请确保中间层服务器上组件为最新版本”的原因及解决方法

    关于K3远程组件测试中间层服务器报错问题解决方案

    通达进销存管理组件(php版)

    通达OA进销存管理组件,可兼容2009至2013各版本主程序

    2023年最新c#入门介绍.md

    C#拥有许多强大的编程功能,如布尔条件、自动垃圾回收、标准库、组件版本管理、属性和事件、委托和事件管理、泛型、索引器、条件编译、多线程、LINQ和Lambda表达式等。 C#具有与Java非常相似的语法和编程风格,但在...

    带进度条免组件全功能文件上传和管理系统 1.0

    把系统文件放置在支持ASP的网站空间,不用注册组件,便可实现文件快速上传和后台管理功能。上传模块的进度条让您及时掌握上传动态,上传成功后即时生成的下载链接更能让您体验上传成功的喜悦;管理模块包含对已上传...

    Web开发组件管理器Bower.zip

    Bower 是一个针对Web开发的包管理器。该工具主要用来帮助用户轻松安装CSS、... 在Bower中,可以通过 component.json文件来定义包的名称、版本、代码中的主要元素、版本之间的依赖关系等。 标签:Bower Web框架

    带进度条免组件全功能文件上传和管理系统.rar

    带进度条免组件全功能文件上传和管理系统系统共有17个参数可供用户个性化设定,试用版只有webname、mail、Mypage、adm、tim等5个参数可供体验设置,其它参数已锁定,具体请用记事本打开inc.asp根据提示使用。...

    基于基线的软件配置管理版本控制

    然后研究版本管理,包括版本管理的功能、版本树、版本的串行与并行演变过程,并通过图形给出了版本演变历史和组件版本的变化过程;最后研究版本控制的主要内容,包括检入检出控制、分支和合并、历史记录。结果表明,在...

    PSMLIB IIS 管理组件

    特别说明:本组件原名 “易网IIS管理组件”(可以在百度里搜索一下),之前发布的最新版为2.x,原为自己服务器使用,所以一直没有更新。因不断有网友要求新版本,所以重构了所有代码发布最新版本,原来的调用方法...

    Axure WEB端交互原型通用组件模板库 v3.2 (Axure RP9作品).zip

    在新版本中我们对作品的内容体系进行了一次重要的重构,新版本由组件列表、交互手册、模块组合、页面交互、界面模板、相关分享等6大部分组成,为了更符合新版本的内容定位,作品名称更名为:Axure WEB端交互原型通用...

    react-react版本的日历组件支持单双选横竖屏节假日信息

    react-react版本的日历组件支持单双选横竖屏节假日信息

    C#.NET 通用权限管理系统组件v3.7源码

    C#.NET 通用权限管理系统组件 v3.7_20120724 源码

    向日葵甘特图组件

    <br>数据一致性:可以直接读取MS Project(版本在2000以后)的XML数据,为用户实现与MS Project的无缝集成提供了良好的接口。而且向日葵甘特图组件也保持了良好的数据可扩展性。 <br>界面一致性:界面整体...

    一款管理AT命令通信交互组件

    AT command(V2) 一款管理AT命令通信交互组件, 适用于Modem、WIFI模块、蓝牙等使用AT命令或者ASCII命令行通信的场景,它涵盖了大部分AT通信形式,如参数设置,查询,二进制数据发送等,同时也支持自定义命令交互管理...

    京东iOS客户端组件管理实践

    组件多了,它们的依赖关系、版本等的管理成为问题,但这方面的分享很少。京东iOS不但实施了组件化,还专门开发了一套组件管理系统。希望京东的实践可以给大家一些参考思路。 先大概交代下背景:京东的iOS客户端从...

    Vue等5种版本管理后台模板UI框架源码-Shreyu

    Shreyu是功能齐全的高级管理后台模板,使用Bootstrap4.3.1。它有大量的精心设计和灵活的组件,UI元素,应用程序页面等。主题是充分响应式设计,支持所有现代/浏览器设备。模板可用于构建任何现代web应用程序、数据仪表...

    NET组件程序设计 第2版中文版.part3.rar )

    本书主要介绍了设计和开发基于组件的.NET应用程序所需要的技术及相关主题,说明了.NET组件程序设计的起源和它对以往技术缺陷所作的改进。本书还利用大量的代码示例、使用技巧、开发警示、设计准则和富有创意的实用...

    网上买的后台模板HTML 整套Easyui皮肤组件 可用超帅

    EasyUI信息管理系统现在支持的浏览器包括:IE浏览器:IE8+(只支持标准模式),火狐浏览器:Firefox 12+(PC & Mac),Safari浏览器:Safari 6+,Google浏览器:Chrome 18+ ,欧朋浏览器:Opera 12+(PC & Mac)

    IIS在线管理组件ASP免费版 v1.0

    ##############################################################IIS在线管理组件ASP免费版1.0版权所有:上帝之泪(poron8) QQ:43292793 在使用当中如有不明之处请EMAIL:poron8@vip.sina.com欢迎转载,但请不要删除...

    Microsoft SQL Server 2005 向后兼容组件

    (Microsoft SQL Server 2005 向后兼容组件) SQL Server Backward Compatibility 包中包含 最新版本的 Data Transformation Services 2000 运行时 (DTS)、SQL 分布式管理对象 (SQL-DMO)、 决策支持对象 (DSO) 和 ...

Global site tag (gtag.js) - Google Analytics