【平台开发】— 7.重构-增加结果统一处理

简介: 【平台开发】— 7.重构-增加结果统一处理

前面实现了一个简单的登录,接下来开发的是项目管理功能。


但是在写完项目列表接口后,发现了重复代码的情况,这时候就需要重构下代码了。


一、代码冗余


首先看下之前写的UserController和新写的ProjectController中的2个方法:


1. UserController


@PostMapping("/login")
    public Map<String, Object> login(@RequestBody UserRequest user) throws Exception {
        String username = user.getUsername();
        String password = user.getPassword();
        Map<String, Object> result = new HashMap<>();
        Map<String, Object> userToken = new HashMap<>();
        Map<String, Object> msg = new HashMap<>();
        if (userService.isUserExist(username, password)) {
            userToken.put("token","admin-token");
            result.put("code", 20000);
            result.put("data", userToken);
        } else {
            msg.put("msg", "用户或密码错误");
            result.put("code", 50000);
            result.put("data", msg);
        }
        return result;
    }


2. ProjectController


@GetMapping("/getProjectList")
    public Map<String, Object> projectList() throws Exception {
        List<Project> projectList = projectService.getProjectList();
        Map<String, Object> result = new HashMap<>();
        result.put("code", 20000);
        result.put("data", projectList);
        return result;
    }


问题就是我在对于返回结果的处理上,每次都要设置code,data这样的值,后面还有其他类似的方法,如果都要写一次那也太不科学了。


二、增加Result类


其实我们做接口测试也都知道,通常接口返回的信息都是这样居多:


{
    "code": 20000,
    "message": "",
    "data": {
        "token": "admin-token"
    }
}


那我就以这个为目的,去将返回结果抽象出来。


创建一个Result类去统一处理可能出现的一些返回形式,类里提供了多个构造方法,可以根据不同需求进行传参。


package com.mock.platform.common;
public class Result {
    private static int SUCCESS_CODE = 20000;
    private static int FAIL_CODE = 30000;
    private int code;
    private String message;
    private Object data;
    private Result(int code, String message, Object data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }
    public static Result success() {
        return new Result(SUCCESS_CODE,null,null);
    }
    public static Result success(Object data) {
        return new Result(SUCCESS_CODE,"",data);
    }
    public static Result fail(String message) {
        return new Result(FAIL_CODE,message,null);
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }
}


三、重构


Result已经准备好了,现在可以重构login 方法了(注释部分是老代码):


//    @PostMapping("/login")
//    public Map<String, Object> login(@RequestBody UserRequest user) throws Exception {
//        String username = user.getUsername();
//        String password = user.getPassword();
//        Map<String, Object> result = new HashMap<>();
//        Map<String, Object> userToken = new HashMap<>();
//        Map<String, Object> msg = new HashMap<>();
//        if (userService.isUserExist(username, password)) {
//            userToken.put("token","admin-token");
//            result.put("code", 20000);
//            result.put("data", userToken);
//        } else {
//            msg.put("msg", "用户或密码错误");
//            result.put("code", 50000);
//            result.put("data", msg);
//        }
//        return result;
//    }
    @PostMapping("/login")
    public Result login(@RequestBody UserRequest user) throws Exception {
        String username = user.getUsername();
        String password = user.getPassword();
        Map<String, Object> userToken = new HashMap<>();
        if (userService.isUserExist(username, password)) {
            userToken.put("token","admin-token");
            return Result.success(userToken);
        } else {
            return Result.fail("用户名或密码错误");
        }
    }


请求下接口,验证一下。


  1. 用户名密码都正确的情况:


1268169-20200722145246605-1707590726.png


  1. 密码不对的情况:


1268169-20200722145258220-634871374.png


完成,可以探索下一个坑了。

相关文章
|
中间件 API 开发者
组装式架构重构未来平台研发模式
企业数字化转型如火如荼的进行中,快速响应市场需求变化,低成本进行数字化改造时每个企业追求的目标。而组装式架构可以完美解决B段客户对于软件平台的高质量要求。
组装式架构重构未来平台研发模式
|
测试技术
|
4月前
|
搜索推荐 API 数据处理
什么是无代码?哪些人适合通过无代码来开发自己的业务系统
无代码是一种无需编程知识即可构建应用的方法。用户通过拖拽组件并设置参数,即可搭建功能完备的应用系统。其核心特点是普适性和包容性,降低了技术门槛,提供了直观界面,能快速响应需求变化,同时降低成本并具有一定的可扩展性。无代码适合一线业务人员、中小企业及专业技术人员使用,但在高度定制化、复杂逻辑处理或深度系统集成方面仍需传统开发。以草料二维码为例,无代码平台提供活码、表单、计划管理等功能,助力快速搭建各类应用系统,使每个人都能成为开发者。
|
7月前
|
设计模式 安全 Java
老系统重构系列--如何用一套流程接入所有业务线
**摘要:** 本文介绍了老系统改造的过程,作者提出,ToB业务的挑战在于需要支持多种差异化的业务需求,而模板模式在处理这种需求时可能会导致继承关系复杂和粒度过粗。为了解决这些问题,文章提出了以下步骤: 1. **梳理流程差异点**:识别不同业务流程的差异,以便确定扩展点。 2. **领域模型梳理**:区分核心域和支撑域,确保核心域的稳定性。 3. **二次抽象隔离层**:创建隔离层,避免核心域因新业务接入而变得不稳定。 4. **基于SPI的扩展体系建设**:选择了COLA-SPI实现扩展点,允许业务域定义接口并实现差异化的流程逻辑。
144 0
|
7月前
|
前端开发 Nacos 微服务
平台设计-部署模式
平台有多做部署模式
|
7月前
|
安全 前端开发 测试技术
【测开方法论】当老功能代码命名不规范的时候...如何安全增加新功能
【测开方法论】当老功能代码命名不规范的时候...如何安全增加新功能
|
安全 搜索推荐 机器人
API接口技术的使用可以增加软件开发和运行的灵活性,降低软件运行和维护的成本
随着科技的发展和互联网的普及,越来越多的公司和企业把业务拓展到互联网上,这就需要用到API接口技术。API(Application Programming Interface,应用程序接口)是指不同软件系统之间进行数据交流和信息共享的一种方式和规范,它通过标准化的接口实现不同系统之间的数据传递和协作,是构建应用和软件的基础。
「业务架构」定义业务能力-备忘单
「业务架构」定义业务能力-备忘单
|
安全 数据可视化 Java
Jmix - 业务系统高效开发的少代码平台
少代码具有低代码产品的所有优点,但是又没有任何低代码产品的缺点。[Jmix.cn ](https://www.jmix.cn/)从定位、产品设计方面把低代码平台的缺陷都抹平并且提升为优点。我们称它为 “少代码”。
497 2
Jmix - 业务系统高效开发的少代码平台
|
存储 SQL 数据可视化
模板化的封装,降低业务代码开发
做这些业务设计时,核心思想是:把常用的逻辑进行封装,流程设计为可配置,这样即可在一定时间内应对业务的需求和变化,降低开发成本的支出,从而使研发更侧重核心业务的管理和抽象封装等内容。
164 0
模板化的封装,降低业务代码开发