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

news/2024/10/18 5:45:37/

  • 一、需求背景
  • 二、创建项目
  • 三、基础工作
  • 四、定义 Handler 类
  • 五、实现员工接口
  • 六、功能测试
    • 6.1 开发控制器
    • 6.2 功能测试
  • 七、总结


一、需求背景

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

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

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

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

1——总经办
2——人力资源部
3——设计研发部
4——财务部
5——营销部
6——生产部

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

public class UserServiceImpl implements UserService {@Overridepublic 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 {@Overridepublic String getDepartmentTitle(String code) {return "总经办";}
}

人力资源部分支:

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

设计研发部分支:

@Component
@HandlerType("3")
public class Handler3 extends AbstractHandler {@Overridepublic 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 {@Autowiredprivate HandlerContext handlerContext;@Overridepublic 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 {@Autowiredprivate 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 代码,方便开发者维护升级代码版本。

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


http://www.ppmy.cn/news/101877.html

相关文章

实时频谱-4.1实时频谱分析仪的应用

脉冲测量 泰克实时频谱分析仪(RSA)特别适合进行脉冲测量。所有 RSA 型号上都可以包括自动脉冲测量软件。可以选择对各个脉冲和脉冲趋势信息进行全面分析。与传统频谱分析仪不同,各种型号的 RSA 都指定了系统上升时间 / 下降时间(最高 10 ns)、最小脉冲周期(最短 50…

EL表达式(二)-- EL表达式的基本用法

目录 1. EL表达式的运算 1.1 算术运算符 1.2 逻辑运算符 1.3 比较运算符

淘宝直通车和引力魔方区别

自从平台推出了引力魔方之后,就有很多卖家分不清,自己的店铺到底是适合直通车呢?还是适合引力魔方去推广呢? 其实很简单,因为这两个工具的功能完全不一样。直通车带来的是搜索流量,通过搜索竞价的方式点击成…

【滤波】设计卡尔曼滤波器

本文主要翻译自rlabbe/Kalman-and-Bayesian-Filters-in-Python的第8章节08-Designing-Kalman-Filters(设计卡尔曼滤波器)。 %matplotlib inline#format the book import book_format book_format.set_style()简介 在上一章节中,我们讨论了教…

2023年高性能计算就业前景如何?IT人的机遇与挑战

在当今数字化时代,高性能计算(HPC)作为一项关键技术,正迅速成为各行各业的核心需求。不论是在职程序员还是在校大学生,懂高性能计算都将大大提升工作及科研、做课题的效率。而且加之2023年大模型的风靡,人工…

Java递归

3 递归 3.1 递归基础 递归概述:以编程的角度来看,递归指的是方法定义中调用方法本身的现象递归解决问题的思路: 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算递归解决问题要找到两个内…

List系列集合

List系列集合的使用 List系列集合有序,可重复,有索引的。 List集合继承了Collection集合的全部功能 List系列集合有索引: public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。 public E get(…

涨知识!一文带你读懂空气质量数据(附Java 和小程序接入示例代码)

空气污染对人类健康和环境造成了巨大的危害。据统计,每年因空气污染导致的早逝人数超过数百万人。长期暴露在污染物中,人们易患呼吸系统疾病、心血管疾病、癌症等。此外,空气污染还对生态系统、农作物和能源消耗产生负面影响。 在解决空气质…