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

缺点

  • 文件数量增加
    • 需要维护两个文件
    • 小型项目可能显得过度设计
相关推荐
段ヤシ.2 分钟前
回顾Java知识点,面试题汇总Day17(持续更新)
java·springboot·spring security·shiro·mybatis-plus·jdbctemplate·spring data jpa
jjjava2.04 分钟前
Java 多线程核心基础与线程安全
java·开发语言
悟乙己11 分钟前
因果推断方法实践:Python实现合成控制法
开发语言·python
147API11 分钟前
Claude Opus 4.8 接口与工程落地分析:长任务调用链应该怎么设计
java·前端·数据库
lulu121654407813 分钟前
Claude钩子系统架构设计:从执行时序到扩展机制
java·人工智能·python·ai编程
.千余16 分钟前
【C++】C++核心语法:函数重载与缺省参数原理与避坑
c语言·开发语言·c++·经验分享·笔记·git·学习
DreamLife☼20 分钟前
OpenBCI-Python与OpenBCI:实时脑电信号采集实战
开发语言·python·硬件·选型·openbci·cyton·ganglion
AI行业学习22 分钟前
CC-Switch 下载、安装与使用配置指南【2026.5.29】
java·开发语言·vscode·python·eclipse·laravel
许彰午25 分钟前
03_Java流程控制详解
java·开发语言·python
霍格沃兹测试学院-小舟畅学29 分钟前
接口自动化测试的下一个十年:从脚本到Skills,让AI学会“如何测”
java·前端·人工智能