@windwolf
2020-06-18T01:45:45.000000Z
字数 4135
阅读 895
Sailing
总体来说, 目前Sailing体系下分为框架, 产品, 项目三大版块.
三个板块各有其作用, 且都出现了不同程度的市场需求. 因此内对内外都有必要整理一下各方面的操作办法.
框架的主要作用为内部的生产力工具, 其次也作为可以对外销售的一套产品. 其需求来源为:
- 产品及项目开发的反馈: 作为生产力工具, 切实提高生产力是第一要务, 一线的反馈由为重要.
- 重构: 有些需求是非功能性的, 比如出于框架运行性能, 扩展性, 可维护性, 可用性, 市场销售策略等方面的考虑, 需要对框架进行升级改造. 这些项目经正式立项.
总体来说, 产品需要按照此自身特点来保持升级节奏, 升级的需求来源包括项目反馈, 市场反馈, 自研完善.
- 项目反馈: 项目进行到尾声后, 组织项目总结会, 分析该项目中的亮点, 难点. 并由产品组结合其他项目类似需求以及已有产品特点, 形成产品升级方案. 现阶段, 项目反馈是产品的主要需求来源.
- 市场反馈: 根据市场综合情况收集到的需求, 经正式立项. 这类需求往往是在需要开一条新产品线的时候会出现.
- 自研完善: 产品不断积累思考后得到的优化方案, 经正式立项. 此类需求往往是在应用模块复杂到了一定程度, 需要重构提高可配置性, 可维护性的时候会出现.
项目的需求完全来自客户. 项目是公司收入的主要来源, 为了保持项目考核的纯粹性, 项目需求完全来源于项目.
整个Sailing产品体系总体上服务于项目, 因此版本管理相对复杂, 需要兼顾框架, 产品和项目. Sailing早期有过兼顾产品和项目的版本化方案, 方案试图将项目和产品的所有调整纳入同一套版本中来调整, 以此来达到项目个性化修改后, 还能实现产品升级的目的. 但文中方案过于理想化, 不具备可操作性. 此外还探讨过如何保持产品元数据在项目中的兼容性的方案, 但难度很大, 至今还没有精力实现.
目前实践下来, 现阶段, 框架, 产品, 项目三者之间保持以下关系是比较恰当的:
下面具体说明各个部分的版本控制策略.
框架以程序库的形式发布到包管理器(maven, npm)中, 包本身包含版本号信息, 包中的各个模块也包含版本号信息, 两者用途不同.
模块版本号用于管理模块级别的升级发布. 分两段: major.minor
major版本号发生变更后, 需要一定的机制触发自动版本迁移逻辑. 如果确实很难做到自动迁移, 那么必须提供工具协助手工迁移, 迁移工具必须进行版本校验, license校验
包版本号用于区分包管理器中的多个发布版本. 分三段: record.major.minor
原则上, 元数据架构属于某个模块, 元数据架构的调整必然引起模块的调整, 因此, 元数据架构版本号和模板版本号保持一致, 定义和版本迁移方法也一致. 但在一个模块包含多个元数据的场景中, 这种控制方法过于粗放, 因此, 元数据架构版本独立于模板版本. 版本号分两段: major.minor
minor: 子版本号. 每次发布不改变架构的元数据变更时, 子版本号都要递增. 不改变架构的变更包括:
? 元数据迁移过程中, 需要参考其他元数据
对元数据内容的修改也应该版本化, 具体体现为任何修改都应带有时间戳和设计器用户名.
应用模块主要就是实体定义, 自定义的函数, 服务等硬编码的部分, 这部分的版本管理办法和模块版本相同. 区别在于产品和不同项目之间是版本连续性是独立的, 换句话说, 不同项目中的同样版本不具有可替代性.
此外, 应用模块也可以定义自己的元数据. 如果这么做了, 元数据版本管理同上述元数据章节.
所有的程序发布, 特别是框架和项目, 影响面十分的广, 为了减少发布过程本身的问题, 所有的发布都需要专人负责.
暂定:
- 框架前端, VIP; 框架后端, 大师;
- 产品: 谦哥;
- 项目: 各项目中指定人员;
目前产品的开发缺乏连续性, 相邻版本的差异巨大, 后续产品升级需要考虑原产品特性.
项目启动后, 在适当的时候从产品主干fork出项目. 项目由两个分支组成:
- 项目主分支. 项目分支之后建立的第一个分支.
- 线上分支. 对应线上修改元数据的分支.
1. 日常离线修改的元数据和代码, 提交到项目主分支.
2. 日常线上修改的内容, 修改好之后提交到线上分支.
3. 发布前, 确保客户环境中的线上分支都push了; 随后在开发环境中pull线上分支, 并将线上分支合并到项目主分支, 如发生冲突解决之.
4. 合并成功后, 将项目主分支合并回在线分支, 由于上一步中已经合并过了, 因此这一步不会发生冲突.
5. 在开发环境中, 从项目主分支build, pack, 并通过一定的办法发布线上环境.
6. 线上环境元数据从线上分支pull下拉.
7. 启动程序.
8. 同步数据库.
9. 确认发布完成后, 将发布日志发布到内部群, 由项目经理决定发到客户群的最终内容.
项目启动后, 在适当的时候从产品主干复制一份源码, 并推送到一个新的项目库中.
编码规范是为了:
为此, 我们需要: