• 论编程技巧


    目录

    后端要做什么

    后端开发进阶体系

    编程技巧

    不写重复代码

    提高可读性

    如何提升编程技巧


    后端要做什么

    后端的职责就是管理数据,包括处理、存储、查询。这就要求后端工程师具有数据结构的设计能力、优化数据库查询的能力等。 为了防止单机崩溃导致数据完全丢失、或者降低读写负载,需要使用数据库分区、分片、多机; 为了更好的监控系统负载需要性能监控组件; 追踪错误数据开始出错的地方,需要使用日志 还有导入、导出、打印、解析,调用其他服务,提供接口,校验幂等之类。

    后端开发进阶体系

    基础:java、Apache 工具包 框架:Spring 全家桶、Redis、MQ、K8s、docker 技巧:编程技巧,代码整洁,重构代码

    编程技巧

    在我刚刚开始工作的时候,忽略了编程技巧,这个其实非常重要。 举个例子,实现同样的功能,有的人只需要 2 行代码,有的人需要 10 行代码,再结合这段代码的可读性,就能体现编程编程技巧了。

    不写重复代码

    比如说,判断字符串是否为空,有以下几种方法

    StringUtils.isNotBlank(str);

    也可以用

    str != null && str.length > 0 && !isWhitespace(str)

    使用 Apache 包里的 StringUtils 简化了判空代码,也提升了可读性。 这就体现了对 Apache 包的熟练程度。

    提高可读性

    此外代码的易读性也非常重要,举个例子:

    1. public class Test1 {
    2. public void process() {
    3. check();
    4. modify();
    5. persist();
    6. }
    7. private void check() {
    8. checkReq();
    9. checkAuth2();
    10. checkBusiness();
    11. }
    12. private void modify() {
    13. modifyReq();
    14. clearSensitiveFields();
    15. modifyCreatedByAndUpdatedBy();
    16. }
    17. private void persist() {
    18. createLog();
    19. createRecord();
    20. }
    21. // ...
    22. }

    Test1 中,可以读出:

    1. 只有 process() 的修饰符是 public 其余均为 private,隐含了只有这个方法是对外提供的。
    2. process() 方法中有 3 步,分别是 check()modify()persist(),其方法名明示其作用分别是检查,修饰请求,持久化。
    3. 所有检查类代码均在 check() 中,修饰类均在 modify(),持久化代码均在 persist()
    4. persist() 需要保证事务

    然后再举两个反例:

    1. public class Test2 {
    2. public void process() {
    3. check();
    4. modify();
    5. persist();
    6. }
    7. private void check() {
    8. checkReq();
    9. checkAuth2();
    10. }
    11. private void modify() {
    12. modifyReq();
    13. clearSensitiveFields();
    14. modifyCreatedByAndUpdatedBy();
    15. }
    16. private void persist() {
    17. createLog();
    18. checkBusiness();
    19. createRecord();
    20. }
    21. // ...
    22. }

    Test2 的的问题是 persist() 方法中有 checkBusiness() 且在 createLog()createRecord() 之间。如果这里检查失败,抛出业务异常,那么创建日志成功,但是创建记录失败,如果 persist() 方法没做原子性的话,那就会导致数据错乱。 推荐所有的检查类代码均放在 check() 里。

    另一个反例:

    1. public class Test3 {
    2. public void process() {
    3. check();
    4. modify();
    5. persist();
    6. }
    7. private void c() {
    8. cr();
    9. ca2();
    10. cb();
    11. }
    12. private void m() {
    13. mr();
    14. msd();
    15. mcu();
    16. }
    17. private void p() {
    18. pl();
    19. pr();
    20. }
    21. // ...
    22. }

    Test3 类的方法名可读性很差,比如 cr()checkRequest() 前者很难理解是什么意思,但后者能根据方法名理解其内部功能。

    如何提升编程技巧

    1. 读优雅整洁的代码,github 上应该有不少,我是到了这家公司之后才见到简洁高效的代码。
    2. 看书,比如《代码整洁之道》、《重构》、《设计模式 GOF》等。从中可以知道如何重写代码,如何让代码更简洁高效。
    3. 重写现有的杂乱代码。功能的核心代码一定是需要多次重写的,因为设计与落地存在的落差,会导致最开始定义的结构一定不是最优的。而打补丁式的修改会让代码越来越乱,因此需要在新功能开始时,边写边重构。
    4. 日常的积累。日常写代码的时候,不断寻找更好用、可读性更强的代码写法,比如:如何优化 Lambda 表达式的可读性,如何拼接多条件的 Lambda 过滤。尽管代码功能一样,但会大幅度提升可读性,这样后续修改或者他人接手的时候能节约很多时间。
  • 相关阅读:
    SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.3 实体类快速开发【lombok】
    【CNN】GoogLeNet——大胆创新网络结构
    如何使用javascript制作一个网页端3D贪吃蛇游戏(附源码及链接)
    c++ 虚函数
    编程语言的未来 1、JavaScript 到 TypeScript2、Java 到 kotlin3、C++ 到 Carbon
    【RocketMQ】消息的拉取
    创建和销毁对象:用静态工厂方法代替构造器
    Django 4.0.6源码分析:自动重启机制
    CNCF基金会成员的分类
    图论——Dijkstra算法matlab代码
  • 原文地址:https://blog.csdn.net/DossShi/article/details/126226701