如何优雅的在SpringBoot中编写选择分支,而不是大量if else?

简介: 如何优雅的在SpringBoot中编写选择分支,而不是大量if else?

一、需求背景

部门通常指的是在一个组织或企业中组成的若干人员,他们共同从事某一特定工作,完成共同的任务和目标。在组织或企业中,部门通常是按照职能、工作性质或业务范畴等因素进行划分的,如财务部门、人力资源部门、市场部门等。

部门编号是公司或组织内部对不同职能部门的标识符号,通常采用数字、字母或其组合的形式来进行表示。部门编号的作用在于方便管理者对各个部门进行辨识和分类,同时也有利于人力资源管理和工作流程的优化。

在实现公司内部 OA 系统时,难免会遇到 部门编号 这个概念。

部门编号通常由公司或组织的管理人员根据实际情况进行规划和安排,各个部门的编号应当具有独立性、唯一性和易于记忆等特点,以方便在日常管理活动中使用

1——总经办

2——人力资源部

3——设计研发部

4——财务部

5——营销部

6——生产部

相信大多数同学,还是会采用最简单的 if else 方案,就是这样!

public class UserServiceImpl implements UserService {
    @Override
    public String getDepartmentTitle(String code) {
        if(Objects.equals("1",code)) {
            return "总经办";
        } else if(Objects.equals("2",code)) {
            return "人力资源部";
        } else if(Objects.equals("3",code)) {
            return "设计研发部";
        } else if(Objects.equals("4",code)) {
            return "财务部";
        } else if(Objects.equals("5",code)) {
            return "营销部";
        } else if(Objects.equals("6",code)) {
            return "生产部";
        }
        return "没有归属部门";
    }
}

这样实现起来简单,代码可读性好,但在部门数量过大的时候反而会加大工作量,不利于代码维护

但在开发过程中,如果不建立数据表,则需要用选择结构进行判断赋值,所以就产生了大量的 if-else 代码。

本文的目标,就是消除这些 if-else 代码,用更高级的方法来实现!


二、创建项目

首先,请同学们打开 IDEA,点击新建项目,界面如下所示。

选择 Maven,输入项目名称后,点击下一步,如下图所示。

直接点击创建即可,如下图所示。

三、基础工作

同学们在创建完成项目之后,在 cn.zwz.entity 新建一个 User 员工类,如下图所示。

在员工类中定义 部门编号姓名 两个字段,代码如下。

@Data
public class User {
    // 部门编码
    private String code;
    // 员工姓名
    private String name;
}

使用 @Data 注解,需要引入 lombok 依赖哦!

创建完成后,界面如下所示。


四、定义 Handler 类

Handler 类用于实现不同情况的处理措施,请同学们先创建抽象类,再创建三个 Handler 类。

抽象类:

public abstract class AbstractHandler {
    abstract public String getDepartmentTitle(String code);
}

总经办分支:

@Component
@HandlerType("1")
public class Handler1 extends AbstractHandler {
    @Override
    public String getDepartmentTitle(String code) {
        return "总经办";
    }
}

人力资源部分支:

@Component
@HandlerType("2")
public class Handler2 extends AbstractHandler {
    @Override
    public String getDepartmentTitle(String code) {
        return "人力资源部";
    }
}

设计研发部分支:

@Component
@HandlerType("3")
public class Handler3 extends AbstractHandler {
    @Override
    public String getDepartmentTitle(String code) {
        return "设计研发部";
    }
}

五、实现员工接口

请同学们在 cn.zwz.service 包下,新建 UserService 接口,如下图所示。

设计 获取部门名称 的接口,代码如下。

public interface UserService {
    /**
     * 获取部门名称
     * @param code 部门编码
     * @return 部门名称
     */
    String getDepartmentTitle(String code);
}

接着完成 UserService 接口的实现,创建 UserServiceImpl 类,如下图所示。

代码如下图所示。

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private HandlerContext handlerContext;
    @Override
    public String getDepartmentTitle(String code) {
        AbstractHandler abstractHandler = handlerContext.getInstance(code);
        return abstractHandler.getDepartmentTitle(code);
    }
}

六、功能测试

6.1 开发控制器

创建 cn.zwz.controller.UserController 类,用于对接基于浏览器的测试,代码如下。

package cn.zwz.controller;
import cn.zwz.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/dep")
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping(value = "/get", method = RequestMethod.GET)
    public String get(@RequestParam String code) {
        return userService.getDepartmentTitle(code);
    }
}

代码首先注入了 UserService 类,然后直接传入接口的参数 code。

6.2 功能测试


七、总结

利用 SpringBoot 的 Handler 策略模式可以简化大量的 if else 代码,方便开发者维护升级代码版本。

同学们在开发自己的商业订单时,可以采取这个方案来处理大量的选择逻辑。


相关文章
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之计算测试用例的分支覆盖率如何解决
SpringBoot单元测试快速写法问题之计算测试用例的分支覆盖率如何解决
|
1月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。
|
1月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
1月前
|
JavaScript Java 关系型数据库
基于springboot的古树名木保护管理系统
本研究针对古树保护面临的严峻挑战,构建基于Java、Vue、MySQL与Spring Boot技术的信息化管理系统,实现古树资源的动态监测、数据管理与科学保护,推动生态、文化与经济可持续发展。
|
1月前
|
监控 安全 JavaScript
2025基于springboot的校车预定全流程管理系统
针对传统校车管理效率低、信息不透明等问题,本研究设计并实现了一套校车预定全流程管理系统。系统采用Spring Boot、Java、Vue和MySQL等技术,实现校车信息管理、在线预定、实时监控等功能,提升学校管理效率,保障学生出行安全,推动教育信息化发展。
|
1月前
|
人工智能 Java 关系型数据库
基于springboot的画品交流系统
本项目构建基于Java+Vue+SpringBoot+MySQL的画品交流系统,旨在解决传统艺术交易信息不透明、流通受限等问题,融合区块链与AI技术,实现画品展示、交易、鉴赏与社交一体化,推动艺术数字化转型与文化传播。
|
1月前
|
JavaScript Java 关系型数据库
基于springboot的高校运动会系统
本系统基于Spring Boot、Vue与MySQL,实现高校运动会报名、赛程安排及成绩管理的全流程信息化,提升组织效率,杜绝信息错漏与冒名顶替,推动体育赛事智能化发展。
|
1月前
|
JavaScript 安全 Java
基于springboot的大学生兼职系统
本课题针对大学生兼职信息不对称、权益难保障等问题,研究基于Spring Boot、Vue、MySQL等技术的兼职系统,旨在构建安全、高效、功能完善的平台,提升大学生就业竞争力与兼职质量。
|
1月前
|
JavaScript Java 关系型数据库
基于springboot的美食城服务管理系统
本系统基于Spring Boot、Java、Vue和MySQL技术,构建集消费者服务、商家管理与后台监管于一体的美食城综合管理平台,提升运营效率与用户体验。