【Result类】(使用/不使用<T> data的情况);自带静态方法、纯数据类;

使用枚举类

架构的本质之MVC架构 ------ Java简明教程,一套简单、清晰、明了的Java学习路线资料!!!_哔哩哔哩_bilibili

18:00

定义的枚举类

不过这个up是在常量类中,定义了枚举的内部类

Result类使用枚举类

不使用<T> data

Result没有用<T> data

他定义了一个res类,封装了Result和返回的voList

两种设计模式

自带静态方法

java 复制代码
@Data
public class Result<T> implements Serializable {
    private Integer code;
    private String msg;
    private T data;

    public static <T> Result<T> success() { ... }
    public static <T> Result<T> success(T data) { ... }
    public static <T> Result<T> error(String msg) { ... }
    public static <T> Result<T> error(Integer code, String msg) { ... }
}

使用:

java 复制代码
@GetMapping("/teacher")
public Result<JSONObject> getTeacherInfo() {
    JSONObject result = sbsInfoService.getTeacherInfo();
    return Result.success(result);  // 直接调用 Result 的静态方法
}

优点

  • 使用简洁

  • 文件少,维护方便

    • 所有相关代码在一个文件中
    • 不需要在两个文件之间跳转
  • 适合小型项目

    • 项目规模小,不需要复杂的扩展
    • 团队成员少,代码风格统一

缺点

  • 违反单一职责原则(SRP)
    • Result 类既承担数据传输对象(DTO)的职责
    • 又承担工厂方法的职责
  • 扩展性受限
    • 每次添加新的响应类型都需要修改 Result 类
    • 不符合开闭原则(对扩展开放,对修改关闭)

Result 纯数据类 + ResultUtils 工具类

java 复制代码
// 纯数据类
// Result.java
@Data
public class Result<T> {
    private int code;
    private String message;
    private T data;
}

// 独立的工具类
// ResultUtils.java 
public final class ResultUtils {
    public static <T> Result<T> success() { ... }
    public static <T> Result<T> success(T data) { ... }
    public static <T> Result<T> error(...) { ... }
}

使用:

java 复制代码
@GetMapping("/list")
public Result<List<FriendVO>> findFriends() {
    return ResultUtils.success(friendService.findFriends());  // 调用工具类方法
}

优点

  • 符合单一职责原则
    • Result 只负责数据结构定义
    • ResultUtils 只负责对象创建
  • 更好的扩展性
    • 可以轻松添加新的工具方法,不影响 Result 类
  • 适合团队协作
    • 职责清晰,新人容易理解,便于代码审查

缺点

  • 文件数量增加
    • 需要维护两个文件
    • 小型项目可能显得过度设计
相关推荐
AIFQuant13 分钟前
Python实时外汇行情接入实战:WebSocket与REST K线查询
开发语言·python·websocket
vx_Biye_Design39 分钟前
springboot游泳馆系统93765-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·spring·课程设计
名字还没想好☜42 分钟前
Java NIO ByteBuffer 实战:flip/clear/compact 三个绕晕人的方法与 position/limit 心智模型
java·开发语言·后端·spring·nio
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之短信服务多供应商动态切换(阿里云与LeanCloud)
java·spring·阿里云
Doubbbbbbble云1 小时前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法
小溪学编程1 小时前
AQS 原理详解:从 CLH 队列到 ReentrantLock 的实现
java·开发语言
持敬chijing1 小时前
Web前后端开发-JavaScript 入门教程
开发语言·前端·javascript
蜗牛互联网1 小时前
语音AI开始边听边说,改变的不只是响应速度
java·人工智能·后端·语音识别
2601_966949651 小时前
从轮询到策略消费:量化系统如何高效处理五档盘口数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
卓怡学长2 小时前
w233基于vue和springboot的宠物管理系统的设计与实现
java·vue.js·spring boot·spring·intellij-idea