最近,新项目都上 Gitlab 了,对同事提交的代码进行 merge 到 master 的时候,发现不合我的规范,因此进行了一些讨论,引发了一些思考。

起因

项目是一个接入项目,我封装好主要的 api 调用,其他人实现具体的接口。在一次 merge 中,发现有同事的代码不合我规定的规范。

  • 我的

    public class GetShopResponse extends GYBaseResponse {
    
        private List<Shops> shops;
    
        private int total;
    
    // 省略 getter setter
    }
  • 同事的

    public class GetShopResponse extends GYBaseResponse {
    
        private List<Shops> shops;
    
        private int total;
    
        public class Shops {/** 省略 */}
    
    // 省略 getter setter
    }

区别就是,我规定返回的抽象对象统一放到另一个包内,他直接放到到返回的类里。

争论

  • 我最初也没想这么多,直觉就是应该分开放。
  • 他认为写在里面也没影响,反正也不公用,不用写这么多类出来。(其实内部类写完编译之后实际还是有这么多个类)

想法

  1. 我觉得他说得也没错,只是一个用作承载数据的 bean ,放哪里都差不多,也不需要用内部类实现什么特别的功能。
  2. 我觉得他这么做估计是为了省事,不用去另一个目录新建一个文件,起名字,担心别人又跟他起一样的名字
  3. 后来我想了一下,我还是坚持分开。为什么呢?
    1. 代码不止是给机器运行的
    2. 返回值有多种范型的时候,response 就会很长,也就是有一堆 getter setter 在里面,还会柔和内部类的 getter setter
    3. 最重要的就是,人也需要看
    4. 调用 api 的时候,我可以直接看着 source 就知道返回值,十分清晰,如果揉在一起,我相信,我点进去看源码肯定会骂人

项目

  • 主要的框架抽象开源出来了,地址 guanyi-api