我们做的项目,会有 N 个客户. 然后最基本的功能都是一样的,然后再根据客户的需求去改 目前的做法是从最基本的那一份源码 X 从 X copy 一份成立 A 项目 从 X copy 一份成立 B 项目 ... 这个有一个问题就是,出现一个通用 bug 每个项目都要去改 所以老板希望可以改 1 处大家就能修复 不知道这种情况 应该如何设计调整呢?
1
liupeng2579793 2022-07-01 17:38:45 +08:00
基础功能独立出来
|
2
DKrookie 2022-07-01 17:41:06 +08:00
我能想到的就是开分支,然后在新开的分支上作为这个客户的主分支开发,出现通用 bug ,在基础分支修改,然后 merge 就行了。然后用 husky 或者其他用得顺手的工具去限制 git 的一些操作,不允许将其他分支 merge 到基础分支。可以给每个客户的分支定一个前缀,前缀相同的分支才能合并,基础分支能够合并到任何分支。这只是我的想法,没有实践过。
|
3
zfjdif 2022-07-01 17:44:31 +08:00
之前见过讯飞类似的情况,一个 repo ,每个客户开一个分支,大概和二楼说的类似,但是具体如何管理的不太清楚
|
4
dwlovelife 2022-07-01 17:44:47 +08:00
代码一开始就不应该进行 copy 成一个项目,要么这部分代码要复用的部分抽成 jar 包,新起的项目引入 jar 包,然后进行复用。要么用设计模式 就在一个项目上 进行各种定制化的兼容。亦或,你们场景也可以做一份标准的客户需求,后续定制化的需求交给不同的团队的时候 就以各种 SPI 的接口方式进行嫁接。
|
5
dwlovelife 2022-07-01 17:46:58 +08:00
目前看 2 楼的方案 是最适合的 但是基础分支的代码既然已经有了 为啥不能更好的抽取出来 做复用 而要去这么麻烦的事
|
6
jjx 2022-07-01 17:50:03 +08:00
多层设计
axapta 就是这样, 一层一层的可以叠加 简单的就是二层, 基本的交付, git master 分支 然后是上面的定制层,这个层一开始是 0, 有定制再开发, 这个层同核心系统不搭 我们是通过 web 界面去定制这个层, 这个层可以形成一个项目, 有定制的 git 仓库存储 语言上 定制层通常使用动态语言实现 |
7
jjx 2022-07-01 17:52:10 +08:00
代码核心只有一个分支
定制层启动时从 db 等外部系统加载 定制时更新同步更新运行时定制层 代码查找优先从定制层查找,不存在在查找核心层 |
8
vvtf 2022-07-01 17:56:36 +08:00
我们是 X 是通用的; 有一个额外的组件是基于 jsr269 实现可以函数级别的定制化;
A 是基于 X 的, 也就是 dependency X 的. 所以如果 A 需要修改某个功能就修改某个函数即可; 不会修改 X; 增加功能也只需在 A 的项目里增加; 如果 X 出现 bug 了修改了 X 的代码, 再在 A 里面修改一下依赖即可; 这样每个项目的个性需求都是独立的没有影响; |
9
ql562482472 2022-07-01 18:11:27 +08:00
我正在做这一块内容,我们是做产品的,但是客户定开也是个很重要的内容
|
10
kop1989smurf 2022-07-01 18:26:28 +08:00
1 、上策应该是所有项目共用一个工程,通过类似权限配置,功能开关来区分以及定制化。
2 、中策就是楼上多数人说的,核心引用相同的一个库文件 or 代码管理分支,然后每个项目是一个子分支。 3 、下策是做一个脚本或者工作流,一旦主工程有改动,自动同步给其他工程。 |
11
thinkershare 2022-07-01 18:26:55 +08:00
非常麻烦, 我们的很多项目也是这个性质, 一个 core 分支, 每个人一个 dev 分支, 一个 main 分支(合并每个人的开发), X 个定制分支, 非常烦, 每次为 core 做 fix 或者 feat 都要重新 rebase, 然后重新测试. 一直没找到好办法. 但项目性质决定了, 赚的就是给客户定制软件的费用, 维护麻烦也是要做的.
|
12
Huelse 2022-07-01 18:27:11 +08:00
做好抽象和分离工作,通过 git 子模块方式加载(指定分支)进行管理,主包下不同分支对应不同客户
再画个导图啥的就清晰了 |
13
tramm 2022-07-01 18:42:54 +08:00
可插拔式, 每个客户的特殊功能作为一个可插拔的"插件"
|
14
featureoverload 2022-07-01 18:50:38 +08:00
听说过动态链接库吗?(思想)
|
15
twing37 2022-07-02 01:17:38 +08:00
不知道你变得是什么. 如果是实体或者根本的业务逻辑. 那你多份本来就应该是独立的.
但是如果你每次变动的是可以拆出来基础功能.那就应该有个 workspace 去组织依赖. |
16
5boy 2022-07-03 14:55:46 +08:00
sass 都是这样的吧
|