
我现在有个业务场景是,需要把项目 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 metamask 2020-12-30 21:38:17 +08:00 这种情况,可以有这么处理 - 建一个新的 app,这个 app 放 abstract model 。 哪个项目有需要然后再 install 回去, 以后改动就改这个 app,然后两边需要就 update 就好。 |