【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 类
  • 适合团队协作
    • 职责清晰,新人容易理解,便于代码审查

缺点

  • 文件数量增加
    • 需要维护两个文件
    • 小型项目可能显得过度设计
相关推荐
可靠的仙人掌7 小时前
SAC(Soft Actor-Critic)算法底座
开发语言·算法·php
学逆向的7 小时前
汇编——数据存储模式
开发语言·汇编·网络安全
geovindu7 小时前
CSharp: Prototype Pattern
开发语言·后端·设计模式·.net·原型模式·创建型模式
Listen·Rain8 小时前
Springboot整合Ollama实现调用本地多模型
java·spring boot·后端
霸道流氓气质8 小时前
Java 工程师 AI 智能体(Agent)完整学习路线
java·人工智能·学习
天天进步20158 小时前
Python全栈项目--校园食堂点餐与推荐系统
开发语言·python
aaPIXa6228 小时前
C++模板元编程:编译期计算Fibonacci数列
java·开发语言·c++
SunnyDays10118 小时前
Java 编辑 PDF:从增删改查到加密保护
java·修改 pdf·编辑 pdf
eybk8 小时前
写一个可以编制pdf文件的python程序
开发语言·python·pdf
球king9 小时前
CC GUI 插件:在 IDEA 中使用 CodeX
java·ide·intellij-idea