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

缺点

  • 文件数量增加
    • 需要维护两个文件
    • 小型项目可能显得过度设计
相关推荐
水云桐程序员1 小时前
C++可以写手机应用吗
开发语言·c++·智能手机
测试员周周1 小时前
【AI测试智能体】为什么传统测试方法对智能体失效?
开发语言·人工智能·python·功能测试·测试工具·单元测试·测试用例
RSTJ_16252 小时前
PYTHON+AI LLM DAY THREETY-NINE
开发语言·人工智能·python
想学习java初学者3 小时前
SpringBoot整合Vertx-Mqtt多租户(优化版)
java·spring boot·后端
AC赳赳老秦3 小时前
政企内网落地:OpenClaw 离线环境深度适配方案,无外网场景下本地化模型对接与全功能使用
java·大数据·运维·python·自动化·deepseek·openclaw
赏金术士3 小时前
Kotlin 从入门到进阶 之函数模块(核心基础)(二)
android·开发语言·kotlin
weixin_449173653 小时前
在 Java 中,‌线程安全的 List‌ 主要有以下几种实现方式,它们的效率取决于具体的使用场景(尤其是读写比例):
java·线程安全的list
砚底藏山河3 小时前
股票数据API接口:如何获取股票历历史分时KDJ数据
java·python·maven
MegaDataFlowers4 小时前
运行若依项目
java
加号35 小时前
【Qt】 应用程序发布:依赖库拷贝与部署指南
开发语言·qt