V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dwadewyp
V2EX  ›  Django

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

  •  
  •   dwadewyp · 2020-11-24 13:54:08 +08:00 · 2177 次点击
    这是一个创建于 1478 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    哪个项目有需要然后再 install 回去,
    以后改动就改这个 app,然后两边需要就 update 就好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   844 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:10 · PVG 04:10 · LAX 12:10 · JFK 15:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.