我现在有个业务场景是,需要把项目 A 的一部分业务单独拉出来做成一个独立的项目 B,但是项目 B 依赖的 model 在项目 A 中,如果把依赖的 model 在 B 中再写一遍的话 就需要维护两套 model(当 model 发生改变的时候,两处都需要调整),有没有什么办法可以把 model 独立出来,或者直接 import A 中的 model 也可???
1
xxxy 2020-11-24 13:58:52 +08:00
1. 把 model 操作写成接口 2. 把 b 写在 a 里面
|
2
xiaochun41 2020-11-24 14:15:12 +08:00
几年前也遇到过这样的问题,当时有个简单的做法:把所有的 model 都抽离出来,单独形成了一个包。其他用的项目都引用这个包。
|
3
no1xsyzy 2020-11-24 14:30:29 +08:00
为什么要单独拉出来形成独立项目?
根据这个问题,答案可以是(由简单到复杂排序): 1. 给 A 写个新的入口,就是 B 了; 2. 同一个 repo 下面三个包:A B model,setup 直接装上三个包。 3. 把 B 整体剥离,然后让 A 依赖 B |
5
dwadewyp OP @xiaochun41 目前我的想法也是这样的 不过,不知道如果这样做,对后期维护是否有一定的隐患
|
6
a719114136 2020-11-24 14:57:30 +08:00
2 楼的方法之前试过,不过不太好。
个人建议是,两个模块能放到一起就放一起,真到了需要把其中一个模块拆出来的时候,那就是你应该用到微服务或者多服务架构的时候了,如果不愿意用说明那还没到必须拆分的那步,老老实实放一起吧。 |
7
xiaochun41 2020-12-30 15:08:20 +08:00
@dwadewyp 我们只是在一个阶段这样做了,后来业务规模扩大了,就对服务进行了拆分(包括数据库),各个服务维护自己对应的数据库,对外只暴露 api 了。如果要这样做,应该考虑对 开发、测试及发布带来的问题,以及对应的解决方案。记得当时有个问题,比如发布时,都要先更新 model 。
|
8
freakxx 2020-12-30 21:38:17 +08:00
这种情况,可以有这么处理
- 建一个新的 app,这个 app 放 abstract model 。 哪个项目有需要然后再 install 回去, 以后改动就改这个 app,然后两边需要就 update 就好。 |