【2024暑期实习】接到新需求该如何做?

已经实习一个月了,一点点感悟记录在这里。

1. 接到需求需要准备的工作

我们在公司里写需求,一般都是在已有代码的基础上做改动,除非是完全新的业务需求。改动已有代码就需要考虑这样几个问题:

  1. 这个需求对应的功能在系统中是如何工作的?流程是怎么样的?
  2. 这个需求涉及到哪一部分代码的改动?
  3. 进行开发的时候,需要注意什么?

第1点,实际上是在和产品明确需求和团队成员明确分工的过程,同时也要评估需求的合理性,觉得可以完善的地方要提出来。在明确了需求之后,就是第2点,要找师兄询问现有系统的代码组成,然后分析这个需求涉及到哪些部分的代码,明确自己要开发的话要改动哪些文件。最后,就是进行实际的开发。因为我对开发的感悟多一点,所以重点说一下这一部分。

2. 开发过程需要注意的问题

2.1 避免修改已有程序的逻辑

写代码的过程中,要避免修改已有程序的逻辑,原则就是不能修改已有的功能。这里面分几种情况:

2.1.1 直接修改已有逻辑

写好的代码尽量不要动它!

有时,新开发的功能和现有的功能特别相似,但又有一点点的不一样。你可能会觉得,“直接改动已有的这个函数,让它适配新的功能就好了”。但就我个人经验来说,改动已有的代码虽然让代码看起来更短,没有太多重复部分,但带来的影响可能是你无法预料的。如果你没有写测试的习惯,来保证你直接修改已有代码不会破坏已有的代码逻辑的话,不如重新写一个函数,反正也只是复制过来改一改的事情。

2.1.2 间接修改已有逻辑

这里重点讲一讲对象浅拷贝修改。对象浅拷贝修改,是指在修改拷贝出来的对象的时候,间接修改了被拷贝的对象,导致破坏了已有的代码逻辑。先给出一个例子:

// Main.java
public class Main {
    public static void main(String[] args) {
        Student stu1 = new Student("zhangsan", new Score("Math", 90));
        System.out.format("浅拷贝修改前,stu1.extInfo=%s\n", stu1.getExtInfo());

        Student stu2 = stu1;
        HashMap<String, Object> objectObjectHashMap = new HashMap<>();
        objectObjectHashMap.put("desc", "这是一个聪明的孩子");
        stu2.setExtInfo(objectObjectHashMap);

        System.out.format("浅拷贝修改前,stu1.extInfo=%s\n", stu1.getExtInfo());
    }
}
/**
 * 浅拷贝修改前,stu1.extInfo=null
 * 浅拷贝修改前,stu1.extInfo={desc=这是一个聪明的孩子}
 */

// Student.java
public class Student {
    String name;
    Score score;
    Map<String, Object> extInfo;
    public Student() {}
    public Student(String name, Score score) {
        this.name = name;
        this.score = score;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Score getScore() {
        return score;
    }
    public void setScore(Score score) {
        this.score = score;
    }
    public Map<String, Object> getExtInfo() {
        return this.extInfo;
    }
    public void setExtInfo(Map<String, Object> extInfo) {
        this.extInfo = extInfo;
    }
}

// Score.java
public class Score {
    String course;
    int s;
    public Score() {}
    public Score(String course, int s) {
        this.course = course;
        this.s = s;
    }
    public String getCourse() {
        return course;
    }
    public void setCourse(String course) {
        this.course = course;
    }
    public int getS() {
        return s;
    }
    public void setS(int s) {
        this.s = s;
    }
}

可以看到,当我想构造一个新的对象,如果这个对象是从已有对象中浅拷贝过来的,就会出现问题!这俄个代码比较简单,可能能够看出来。当涉及到很复杂的代码的时候,添加新的代码时一定要注意这个问题。

2.2 不要相信任何人的输入

任何函数在利用输入数据进行处理的时候,都一定要判断数据是否可用,尽管这个输入数据可能是自己输入的!这其中包括:

  • 数据是否为空对象null
  • String、Array等是否长度为0
  • 数据是否符合预期的输入格式,比如Map中是否有预期的字段

要确保程序能够正常处理这些边界情况,代码才不会在运行的过程中出现不可预期的结果。

2.3 接口设计原则

接口设计的原则是,用最小的字段集合,提供到上下游需要的信息。这其中包括:

  1. 不要有重复字段。当传递的信息中出现重复字段时,容易给上下游造成误解。
  2. 不要有多余字段。要明确业务分工,确定哪些字段是不需要要让上下游知道的,这样能够在保证数据不外泄的情况下,让上下游只关注于和自己业务相关的字段,保证接口清晰明了。

相关推荐

  1. 2024暑期实习需求如何

    2024-07-13 11:36:03       23 阅读
  2. 如何软件需求分析

    2024-07-13 11:36:03       21 阅读
  3. 达摩院 2025暑期实习 大模型算法

    2024-07-13 11:36:03       27 阅读
  4. DASCTF2024暑期挑战赛

    2024-07-13 11:36:03       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 11:36:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 11:36:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 11:36:03       58 阅读
  4. Python语言-面向对象

    2024-07-13 11:36:03       69 阅读

热门阅读

  1. MATLAB中Simulink.exportToTemplate用法

    2024-07-13 11:36:03       23 阅读
  2. C#面:中间件的使用场景有哪些?

    2024-07-13 11:36:03       21 阅读
  3. vue3 学习笔记08 -- computed 和 watch

    2024-07-13 11:36:03       24 阅读
  4. R语言学习笔记6-数据框

    2024-07-13 11:36:03       20 阅读
  5. 菜鸡的原地踏步史07(◐‿◑)

    2024-07-13 11:36:03       18 阅读
  6. C++ 基础练习 - 第一章(英文版)

    2024-07-13 11:36:03       19 阅读
  7. 深入解析BeautifulSoup:Python网页抓取的瑞士军刀

    2024-07-13 11:36:03       21 阅读
  8. Sentinel和hystric的运用详解

    2024-07-13 11:36:03       22 阅读
  9. 如何让代码添加的控件显示出来

    2024-07-13 11:36:03       19 阅读