V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ak1ak
V2EX  ›  程序员

如何优雅地处理包含继承关系的业务代码

  •  
  •   ak1ak · 2023-02-02 16:32:04 +08:00 · 829 次点击
    这是一个创建于 439 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Hello, all 。请教一个问题:

    存在一个基础类,包含基础属性和标识字段。同时还有很多业务类继承于这个基础类(拥有独特的业务字段),通过标识字段区分不同的业务。不同的业务类有不同的校验规则,还可能把基础类同属性的校验规则覆盖掉。 基于 Spring 该如何优雅地校验和处理这些业务。

    3 条回复    2023-02-03 11:41:12 +08:00
    leeqingshui
        1
    leeqingshui  
       2023-02-02 16:40:30 +08:00
    可用模版方法模式解决:基础类同属性的校验规则写在父类的钩子函数中,如果业务子类不需要覆盖,那么钩子函数不需要重写,如果业务子类需要覆盖,那么就进行重写,这样可以兼容变化和不变的代码
    THESDZ
        2
    THESDZ  
       2023-02-02 19:21:00 +08:00
    根据你的标识,控制程序分支
    最简单的 switch
    复杂一点的就是 用一个 Map<string,interface>(或者其他)存储所有的适配器,通过统一的代理类调用
    代理类中根据标识,获取适配器,然后调用适配器的方法
    可以利用 spring 的 bean 工厂初始化代理类,自动获取所有的适配器。
    适配器也可以有基类,做默认实现。
    litchinn
        3
    litchinn  
       2023-02-03 11:41:12 +08:00
    可以参考 WxJava( https://gitee.com/binary/weixin-java-tools/wikis/MP_%E5%BE%AE%E4%BF%A1%E6%B6%88%E6%81%AF%E8%B7%AF%E7%94%B1%E5%99%A8 )里的这个路由,
    全局定义一个 Router ,Router 里包含自定义的 RouterRule ,RouterRule 里包含 Handler ,RouterRule 里的校验通过后执行对应的 Handler
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5543 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:50 · PVG 16:50 · LAX 01:50 · JFK 04:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.