django 的模型层可以独立使用么或者 如何写成依赖?

2020-11-24 13:54:08 +08:00
 dwadewyp

我现在有个业务场景是,需要把项目 A 的一部分业务单独拉出来做成一个独立的项目 B,但是项目 B 依赖的 model 在项目 A 中,如果把依赖的 model 在 B 中再写一遍的话 就需要维护两套 model(当 model 发生改变的时候,两处都需要调整),有没有什么办法可以把 model 独立出来,或者直接 import A 中的 model 也可???

2158 次点击
所在节点    Django
8 条回复
xxxy
2020-11-24 13:58:52 +08:00
1. 把 model 操作写成接口 2. 把 b 写在 a 里面
xiaochun41
2020-11-24 14:15:12 +08:00
几年前也遇到过这样的问题,当时有个简单的做法:把所有的 model 都抽离出来,单独形成了一个包。其他用的项目都引用这个包。
no1xsyzy
2020-11-24 14:30:29 +08:00
为什么要单独拉出来形成独立项目?
根据这个问题,答案可以是(由简单到复杂排序):

1. 给 A 写个新的入口,就是 B 了;
2. 同一个 repo 下面三个包:A B model,setup 直接装上三个包。
3. 把 B 整体剥离,然后让 A 依赖 B
dwadewyp
2020-11-24 14:44:43 +08:00
@xxxy 目前 b 就是在 a 里面的 目标就是把 b 的业务独立出来
dwadewyp
2020-11-24 14:45:07 +08:00
@xiaochun41 目前我的想法也是这样的 不过,不知道如果这样做,对后期维护是否有一定的隐患
a719114136
2020-11-24 14:57:30 +08:00
2 楼的方法之前试过,不过不太好。

个人建议是,两个模块能放到一起就放一起,真到了需要把其中一个模块拆出来的时候,那就是你应该用到微服务或者多服务架构的时候了,如果不愿意用说明那还没到必须拆分的那步,老老实实放一起吧。
xiaochun41
2020-12-30 15:08:20 +08:00
@dwadewyp 我们只是在一个阶段这样做了,后来业务规模扩大了,就对服务进行了拆分(包括数据库),各个服务维护自己对应的数据库,对外只暴露 api 了。如果要这样做,应该考虑对 开发、测试及发布带来的问题,以及对应的解决方案。记得当时有个问题,比如发布时,都要先更新 model 。
freakxx
2020-12-30 21:38:17 +08:00
这种情况,可以有这么处理

- 建一个新的 app,这个 app 放 abstract model 。

哪个项目有需要然后再 install 回去,
以后改动就改这个 app,然后两边需要就 update 就好。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728688

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX