程序员修炼之道27-不要冲出前灯范围

在真正的开发中,要一直保持一次只做一点改动,在改动完成之后要测试自己的改动。如果一次性的改动太大,很容易出现没有测试到的流程。并且开发中尽量保证一次的改动只需要满足当下的需求,不需要考虑的太长远而徒增复杂度。

在一次接口开发中,我们需要从外部接受消息,在系统中创建出运价。之前我们的系统中从来没有维护过类似的接口,在设计中我想的太多,每一个模块就有一个用一个interface,为了以后每一个客户都可以定制不同的逻辑。
比如通过Message生成name的逻辑,结构就是这么复杂:

public class Message {
    public String a;
    public String b;
}

public class Service {
    public String generateName(Message message) {
        return NameGeneratorFactory.getGenerator().generateName(message);
    }
}

public Interface NameGenerator {
    String generateName(Message message);
}

public class CustomerANameGenerator implements NameGenerator {
    public String generateName(Message message) {
        return message.a + message.b;
    }
}

public class NameGeneratorFactory {
    public static getGenerator() {
        return new CustomerANameGenerator();
    }
}

这样的设计导致我写了很多无用的代码,从NameGenerator开始与它相关联的一切代码都是没有用的,新建这些类本身就够花费很多时间了,而最后还是只有当时的一个客户使用了这个接口。后来在这里有逻辑改动的时候,我把这些interface全部删了,变成了这个样子:

public class Message {
    public String a;
    public String b;
}

public class Service {
    public String generateName(Message message) {
        return message.a + message.b;
    }
}

从这件事开始我就再也没有过度设计代码结构,每次都只满足当时的特定需求,在每次的新需求改动中重构之前的代码,复用逻辑。

另外,从这件事中应该反思的不止是过度设计。对于一个系统来说核心的逻辑是一定的。核心逻辑应该只对外暴露一个common并且稳定的API,不同客户应该通过adapter向common的API靠拢,而不是不断的修改核心逻辑,为了适应不同客户的需求。

像这里的需求,就应该在外部消息进入系统前预先处理好Message


image.png

直接在Message中加出来name属性,后面直接使用就好

public class Message {
    public String a;
    public String b;
    public String name;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容