请问那些用 protobuf 的后端是怎么优雅处理 domain 和 protobuf, db 层之间的数据转换的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
zhengfan2016
V2EX    程序员

请问那些用 protobuf 的后端是怎么优雅处理 domain 和 protobuf, db 层之间的数据转换的

  •  
  •   zhengfan2016 1 天前 754 次点击

    如题,鄙人前端,后端技术栈是 Go+Protobuf ,感觉经常类似的数据结构需要在 protobuf ,domain 和 db 层定义三遍,还得写 a 转 b ,b 转 a ,b 转 c ,c 转 b 的函数,如果复杂结构还得多层遍历,大家也是同样的做法吗

    5 条回复    2026-02-14 11:58:49 +08:00
    Makabaka01
        1
    Makabaka01  
       1 天前
    在国内几个 Top 大厂都干过,我只能说。大部分人都直接把 protobuf 的结构到处传,根本不定义的。
    guyeu
        2
    guyeu  
       1 天前
    先写 domain 层,自然就会给 domain 层的 API 定义数据类,然后把 domain 层接入 db 层,这个时候针对数据库做设计,不管是定义数据库实体生成建表语句还是通过建表语句生成代码定义,都需要在 domain 层接入的时候写一层转换,这层转换有一些工具可以辅助,但是自己写也是很自然的(有 AI 之后可以直接丢给 AI 写)。之后再定义接入层的时候(或者把以前定义的接入层接入 domain 层 ),再写相应的转换逻辑。

    按照我的理解,接入层是有一些逻辑的,最经典的电商下单操作,接入层收到的不管是 protobuf 还是 json ,都需要从对应的实体类里拆出对应的参数,比如调一下 account domain 的 api 预扣余额,然后调一下 inventory domain 的 api 预扣库存,都成功之后再调一下结算,发货。这里面每一个 domain 层的调用的参数都不太一样,也不可能会存在说需要把 api 的入参到处传的情况。
    willchen
        3
    willchen  
       19 小时 24 分钟前
    个人建议是手动,对外接口的 protobuf ,最好遵守“接口仅提供必要字段”,后期也可控
    fov6363
        4
    fov6363  
       16 小时 6 分钟前
    AI 帮写,看代码也很头疼,都是 a 转 b ,b 转 c ,重复代码极高,特别想用一个类型在所有服务共用
    ZARRO
        5
    ZARRO  
       8 分钟前 via Android
    最近写了个自动填充 A convert(B b){}的 IDEA 插件,此前都是手动对,对的过程算是一种休息,顺便也连带思考了字段是否要做一些其他的处理
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2393 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 04:06 PVG 12:06 LAX 20:06 JFK 23:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86