前后端协作,数据格式转换分工,大家是如果划分职责的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xyooyx
V2EX    职场话题

前后端协作,数据格式转换分工,大家是如果划分职责的

  •  
  •   xyooyx 2020-01-14 17:58:51 +08:00 2975 次点击
    这是一个创建于 2098 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 自己平时也写点前端,公司里主要负责后端,知道前端封装完的组件再改麻烦,或类似 echarts 三方组件需要特定数据格式
    • 最近在和前端同事对接,他们就会要求我在服务端给他们转换好
    • 虽说是不咋反感写数据处理代码,但是会考虑到服务端压力,毕竟大体围绕循环,请求一多压力就上来了
    • 想询文下大家是如何沟通分工的

    类似如下的转换

    [ {"date":"2019-01-01","name":"sally","data":"123"}, {"date":"2019-01-02","name":"jack","data":"123"}, {"date":"2019-01-03","name":"jacky","data":"123"} ] 
    { "2019-01-01":[{"name":"sally","data":"123"}], "2019-01-02":[{"name":"sally","data":"123"}], "2019-01-03":[{"name":"sally","data":"123"}] } 
    20 条回复    2020-01-19 12:09:37 +08:00
    sagaxu
        1
    sagaxu  
       2020-01-14 18:06:30 +08:00 via Android   1
    请求一多压力就上来了?请量化分析。
    BluesQu
        2
    BluesQu  
       2020-01-14 18:08:06 +08:00
    一般出接口之前都会沟通好 大概的结构 ,所以基本上不会出现上面你贴出来的那样子的结构的差异,如果真的需要转换了,就相互之间再沟通了。按照以往的工作经历,遇到此类问题:前端也有处理过,后端也有处理过。不会划分的很细致谁来解决。
    xyooyx
        3
    xyooyx  
    OP
       2020-01-14 18:17:43 +08:00 via iPhone
    @sagaxu 浏览器处理和服务端集中处理会有区别
    optional
        4
    optional  
       2020-01-14 18:19:30 +08:00
    这种程度(stateless)的转换,前后端做都毫无压力啊。
    xyooyx
        5
    xyooyx  
    OP
       2020-01-14 18:20:07 +08:00 via iPhone
    @BluesQu 沟通还是重要,这个项目会开少了
    ianva
        6
    ianva  
       2020-01-14 18:29:34 +08:00   1
    有条件可以上 graphql, 就算不上 graphql 前端也需要有自己的领域模型,
    只要把接口 map 到前端的领域模型上即可,
    前端应该基于自身的领域模型去开发,而不是面向后端 api 编码。
    前后端应该在业务开始前定好 schema,前端需要确定领域模型。
    写组件首要的是定接口,也就是 props,了解视觉和交互模型后,就应该确定组件的 props
    接口和组件不应该有依赖,组件对接的页面容器上的业务逻辑上对接前端领域模型的
    如果做不到以上,这个项目前端没有维护的可能性,前后端耦合严重
    Demeter
        7
    Demeter  
       2020-01-14 18:29:54 +08:00
    既然楼主提到划分职责的话 我的建议是后端处理数据
    Akkuman
        8
    Akkuman  
       2020-01-14 18:31:47 +08:00 via Android
    我倾向于第一种
    xyooyx
        9
    xyooyx  
    OP
       2020-01-14 18:39:16 +08:00 via iPhone
    @ianva 多谢,受教了
    ianva
        10
    ianva  
       2020-01-14 18:42:47 +08:00
    @lqw3030 如果有相关的 fake server,原则上前后端不需要沟通,除了在定 schema 的时候,前端基于 fake 的数据基于领域模型完成项目,对接也只是很简单的事情
    sagaxu
        11
    sagaxu  
       2020-01-14 18:52:38 +08:00 via Android
    抛开剂量谈毒性都是耍流氓,有区别是多大区别?大到能成为必须不能放后端的理由?@lqw3030
    M003
        12
    M003  
       2020-01-14 18:57:16 +08:00
    我是前端.我会采用第一种.

    后端并不只服务于前端,也会别的服务会调用.

    第一种.输入结构.看起来也清晰明了.各参数含义明确.方便各业务自行处理.

    第二种,也就减轻了前端循环的一层.但别的服务可不会要这种结构..

    -------
    我猜是做图表展示的数据结构吧?
    ```
    var obj = {};
    arr.forEach(item=>{
    let {date,name,data} = item
    obj[date] = [{name,data}]
    })
    console.log(obj)
    ```
    -------

    在写的过程中,发现含义都变化了.
    第一种,一天对应一条数据
    第二种,一天对应一个数组? 在我不长的开发时间中,理解只要是数组,就有可能包含多条数据
    xyooyx
        13
    xyooyx  
    OP
       2020-01-14 19:09:43 +08:00 via iPhone
    @sagaxu 今天工作不怎么顺利吗?
    35aZ4P8mT576683q
        14
    35aZ4P8mT576683q  
       2020-01-15 00:37:03 +08:00 via Android
    arr.reduce((acc, {date, ...others}) => {
    acc[date] = [{...others}]
    }, {})
    dongliangnerd
        15
    dongliangnerd  
       2020-01-15 10:13:26 +08:00
    @ianva 太难了,不是所有团队都有资源和意愿这么做
    ianva
        16
    ianva  
       2020-01-15 12:15:56 +08:00
    @dongliangnerd 不是资源和意愿的问题,而是有没有能力,这个架构下开发效率会提升很高,而不是消耗资源,特别是基于 ts 开发,项目的质量不是一个级别的
    dongliangnerd
        17
    dongliangnerd  
       2020-01-15 13:26:38 +08:00
    @ianva 你说的这些,除了前端-> 数据层面的映射,其他的组件、ts 还真没啥能力的要求
    raynor2011
        18
    raynor2011  
       2020-01-15 22:28:07 +08:00 via Android
    第一次沟通接口的时候定好,后面不会再因为格式的问题改,因为后端和 UI 不应该强烈耦合,不可能你展示方案变一次,后端接口就跟着动一次
    cs3230524
        19
    cs3230524  
       2020-01-19 12:09:08 +08:00
    当然是后端爹说什么就是什么了
    cs3230524
        20
    cs3230524  
       2020-01-19 12:09:37 +08:00
    要么你自己在前后端加一层做处理。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2684 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 14:52 PVG 22:52 LAX 07:52 JFK 10:52
    Do have faith in what you're doing.
    ubao 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