• 邀请国外的同事一起review公司代码,直接把老外同事惊呆了
  • 发布于 2小时前
  • 11 热度
    7 评论
  • DuXing
  • 7 粉丝 57 篇博客
  •   
国外的同事来国内出差,趁着这个机会,邀请他跟我们一起进行 code review。公司的代码没办法拿出来,只能临时写个伪代码让大家鉴赏一下:
/**
 * 代码鉴赏:执行 1 个任务
 */
public class JavaTasteSample {
    public static void main(String[] args) {
        // 国外同事:1 行代码就搞定,简洁明了
        // ==(浪费了大量的时间在做过度设计,毫无意义的炫技)==
        new Thread(() -> System.out.println("task1 running...")).start();

        // 国内同事:高内聚低耦合,把具体要执行的任务跟线程进行分离,方便扩展......
        // ==(这老外太 low 了,连设计模式都不懂,估计不会写代码)==
        new Thread(new Task(new TaskInnerSupport())).start();
    }
}

interface TaskInner {
    void execute();
}
abstract class AbstractTaskInner implements TaskInner {

    @Override
    public void execute() {
        runTask();
    }
    abstract void runTask();
}
class TaskInnerSupport extends AbstractTaskInner {
    @Override
    public void runTask() {
        System.out.println("task2 running...");
    }
   
}
class Task implements Runnable {
    private TaskInner inner;
    public Task(TaskInner taskInner) {
        inner = taskInner;
    }

    @Override
    public void run() {
        inner.execute();
    }
}
团队中有好几位热门开源项目的 contributor ,他们写业务代码也跟写中间件源码一样,导致代码中存在严重的过度设计,60% 以上的预留扩展点,估计等公司没了都用不上。他们代码写爽了,接手的人一看惨了,调个 "1+1" 的方法要经历一堆 "接口、抽象类、实现类、回调、各种设计模式......" 才能拿到 "2" 这个结果。

这 2 种写法没有谁对谁错,一方水土养一方人,很明显国外的同事水土不服,不知道国内领导喜欢听一些装逼的名词,比如:"高内聚、低耦合、扩展性......"

作为程序员,我内心赞成国外同事说的用第一种写法。1 行代码就搞定,简单明了,等到需要扩展的时候再去抽取不就行了。但作为 "国内的程序员",我也只能跟着用第二种写法了。没办法,国内领导喜欢第二种,如果你用 1 行代码就实现了,那领导会认为你工作过于简单,工作量极不饱和;而用第二种写法,各种设计模式绕来绕去的,没十天半个月根本看不懂,既能体现你技术上的不可替代性,又能提供足量的代码......
用户评论
  • LoveC
  • 绝大部分自以为是的扩展,最后根本用不上。其中大概一半多增加了不必要的复杂度,对相关开发造成困扰。一小部分会对后续的基于真实需求的扩展造成非常大的阻碍
  • 2025/11/6 11:38:00 [ 0 ] [ 0 ] 回复
  • 麻辣码农
  • 设计时预留实现扩展的可能性,不要堵死扩展的路就好。千万不要真的实现扩展,除非你真的知道这里短时间内需要扩展以及扩展的明确方向。

  • 2025/11/6 11:36:00 [ 0 ] [ 0 ] 回复
  • 黄月英
  • 为什么是国外的气到吐血了,国内的就不?这意思你已经明显站队了啊。防御/预防式开发没啥问题啊,只是度有多大的问题。
  • 2025/11/6 11:34:00 [ 0 ] [ 0 ] 回复
  • 回忆经典
  • 按照我们公司之前的 review 风格,会支持国内同事的设计。现在一直在强调开发速度和营业额,没人在乎设计模式。
  • 2025/11/6 11:31:00 [ 0 ] [ 0 ] 回复
  • 王晶
  • 有时候,我更愿意去看一下写得很原始很差的复制多个地方的代码。而不是封装得十多差怎么也理不清关系的代码。虽然说为了扩展性。但是好像十年过去了也没有什么扩展。
  • 2025/11/6 11:29:00 [ 0 ] [ 0 ] 回复
  • CEBBCt
  • 单看着一行代码 支持老外 你这个封装有没有在其他地方用到 用到了 另说,不过也要看你们的使用场景
  • 2025/11/6 11:13:00 [ 0 ] [ 0 ] 回复