一、需求背景
部门通常指的是在一个组织或企业中组成的若干人员,他们共同从事某一特定工作,完成共同的任务和目标。在组织或企业中,部门通常是按照职能、工作性质或业务范畴等因素进行划分的,如财务部门、人力资源部门、市场部门等。
部门编号是公司或组织内部对不同职能部门的标识符号,通常采用数字、字母或其组合的形式来进行表示。部门编号的作用在于方便管理者对各个部门进行辨识和分类,同时也有利于人力资源管理和工作流程的优化。
在实现公司内部 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 代码,方便开发者维护升级代码版本。
同学们在开发自己的商业订单时,可以采取这个方案来处理大量的选择逻辑。