如何优雅的在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 代码,方便开发者维护升级代码版本。

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


相关文章
|
4月前
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之计算测试用例的分支覆盖率如何解决
SpringBoot单元测试快速写法问题之计算测试用例的分支覆盖率如何解决
|
3月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
181 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
176 1
|
3月前
|
前端开发 JavaScript Java
SpringBoot项目部署打包好的React、Vue项目刷新报错404
本文讨论了在SpringBoot项目中部署React或Vue打包好的前端项目时,刷新页面导致404错误的问题,并提供了两种解决方案:一是在SpringBoot启动类中配置错误页面重定向到index.html,二是将前端路由改为hash模式以避免刷新问题。
299 1
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
115 62
|
7天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
52 13
|
14天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
80 2
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
3月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
237 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
下一篇
DataWorks