后端如何线性的提升自己的开发能力,或者学习到一些最佳实践 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
bestmos
V2EX    程序员

后端如何线性的提升自己的开发能力,或者学习到一些最佳实践

  •  
  •   bestmos 213 天前 3082 次点击
    这是一个创建于 213 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近刷到一个排 bug 的博主,发现有些坑自己也是踩过的,想提升一下,避免踩一些前人踩过的坑,有什么比较系统的项目或者课程吗,目标是能到一个五年经验的水平
    譬如下面的一些问题,是我遇到的,但是不知道怎么设计是比较合理且符合规范的

    项目分一期二期,均是 springBoot 单体项目,共用同一个数据库。一期中需要用到二期的功能,二期也需要调用一期的功能。 不考虑微服务,设计之初应该如何架构(重复的业务放公共模块?) 现在的情况是两个项目都有重复的 Dao 层查数据库,明显错误的设计。 现有的情况下又该如何改进。 基础业务(用户信息),字段较多,分主表、详情表。 问题 1:详情表的信息是包在对象里面作为主表 VO 的一个属性返,还是把字段拷一份到主表的 VO 中。 问题 2:在不同业务需要展示的字段不同(比如个人资料界面需要返回所有字段,订单界面只需要返回姓名字段,可能有十多种情况)。 应该按业务分不同接口,还是所有业务调同一个接口返回所有数据(即使大部分用不上)。 如果分不同的接口,所有接口用同一个 VO 还是不同的 VO 。 

    上面的问题已经通过 AI 解决了,但是还可能有其他问题是自己没遇到的(设计模式、不同项目架构、数据库的拆分、什么字段该冗余这些),所以想找找覆盖面比较广项目或者课程学习一下
    找了几个课程看了基本也都是直接告诉你怎么做,没有背后的思考,为什么要这么设计

    7 条回复    2025-03-17 19:22:18 +08:00
    yidinghe
        1
    yidinghe  
       213 天前   5
    其实很多编码和设计方面的坑,前人总结了许多,都写成书了。

    我推荐其中的集大成者,就是《重构》,这本书本应该是每个开发人员必读的,它就是总结了千千万万的坑,并且分门别类,让读者具备管中窥豹、以小见大的能力,并且更重要的是,作者还教读者怎么填坑、怎么在软件生命周期内持续的控制技术债务规模。

    其次是《设计模式》,这本书应该都看过就不详述了,它的思路你可以反过来看:你不按照这个模式设计,会带来哪些问题,这不就是坑么。

    最后就是 AI ,AI 帮助极大,因为你可以不断地深入提问,并让 AI 评估你的思路。就我对 Google 的 Gemini Code 使用体验,它绝对可以看作是一个经验极其丰富,思维极其老到的程序员,我可以说只要有一定的表达能力,跟着 AI 学,软件培训机构通通都得关门。
    ZARRO
        2
    ZARRO  
       213 天前 via Android   2
    一个人开发怎么来都可以,所谓规范更多的是用来解决多人开发的问题的。从多人协作的角度来看,两项目耦合同一个数据库就是不好的设计,因为这意味着 A 系统的开发者修改公用表的逻辑的时候需要去评估 B 系统是如何使用这张表的。解决这种耦合方法就是去划分领域,如果 AB 都是一个领域的,那么没必要划分成两个项目。如果 AB 领域不同,那么公用表是属于哪个领域的呢?是否要引入第三个领域 C 去做这一块逻辑?一般而言哪个系统写这张表就归谁,其他系统通过接口访问即可。不太理解你为什么要选择一种既不是单体又不是微服务的架构。你应该考虑的不是将 dao 变成公用的然后“复制”成两份给两个项目使用,而是该考虑这两个系统是否有独立部署运维的需求,如果有,考虑微服务,如果没有,合并成一个真的单体。
    架构方面的书可以看《凤凰架构》,批判性的了解一下 DDD 。设计模式随便找些网站都能看到,但是关键是知道什么是设计模式。为什么这么多人用设计模式用的这么生硬,越写反而代码越难看?因为他们不理解设计模式只是在特定场景下的由一系列重构组合而成的解决方案。从这方面而言《重构》是一本好书,你可以注意到书中介绍的重构方法是极其的简单,并且部分方法之间是互相冲突的。这揭露出抽象化和反抽象化都可以是一种好的重构,重构没有银弹。之后你再去看那些设计模式,你就可以去推导,他们是由哪些重构组成的,其中各个重构的效果是什么,当前你需要哪些效果,如何去掉那些你不需要的重构。这样在解决问题的时候就不需要去硬套设计模式而引入一系列你还不需要重构导致代码笨重,产生过度(早)优化的问题。如何去应用 DDD 也如此思路。
    nice2cu
        3
    nice2cu  
       213 天前
    1.基础理论扎实
    2.学习开源框架源码
    Leon777
        4
    Leon777  
       213 天前
    不要看课程看书
    bestmos
        5
    bestmos  
    OP
       213 天前
    @ZARRO #2 现在项目是中途进来的,架构已经定了,只能微调,而且每个项目的规范也不太一致(估计取决于搭建人?),所有想学习一下比较普适的规范方便后续快速进入其他项目。
    8355
        6
    8355  
       213 天前   1
    公司要有一定的业务量级才行,其次所谓的最佳实践一定是在一个特定场景下,比如说架构和预算卡死你做了什么设计和努力达到了什么效果,这已经是架构层面做的事了。

    从代码层面设计和冗余一定是有倾向性的,根据公司产品的规划,作为后端需要去了解和沟通,但你无法阻止突然变更方向导致的重构和烂代码紧急兼容方向。

    有时间紧预算多的项目,也有时间宽裕但预算紧的项目,也有时间和预算都紧的项目,没遇到过时间和预算都宽裕的项目,不同情况下所谓的最佳实践是没有任何可比性的,如果以解决方案为前提的话。

    所以不要以所谓的最佳实践作为提升目的,应该透彻的理解多种方案并结合你的情况在多种方案中挑选一个接近的方案在结合自己的实际情况打造自己现阶段的最佳实践。
    zeonlamKen
        7
    zeonlamKen  
       212 天前
    @ZARRO 一直没想明白到底要怎么提升自己的学习、开发思维,在大佬的这一段子中找到了答案,非常感谢!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4299 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:10 PVG 18:10 LAX 03:10 JFK 06:10
    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