如何获取与dto中的整数关联的名称值

how to get name value associated with integer in dto

我正在使用 java,例如,我有 2 tables staff(id, name, status_id, company_id) 和company(id, name),对应的实体长这样:


public class Staff {
    private Integer id;
    private String name;
    private Integer statusId;
    private Integer companyId;
    private Company company;
}


public class Company {
    private Integer id;
    private String name;
    private List<Staff> staffList;
}

对于 table 的 status_id staff0 means New, 1 represents Active and 2 stands for Inactive

我需要在 html page/excel 上显示 NewActiveInactive,而不是 0、1 或 2。

我有一个 StaffDto:

public class StaffDto {
    private Integer id;
    private String name;
    private Integer statusId;
    private String companyName;
}

我的问题是:

  1. statusName(New/Active/Inactive)应该在StaffDto,这样就不需要在每个客户端上根据statusId计算status name ,对吧?
  2. 基于 statusId 获得 statusName 的最佳做法是什么? 我应该写这样的代码
public class StaffDto {

    private Integer statusId;
    private String  statusName;

    public String getStatusName() {
        switch(statusId) {
        case 0: return "New";
        case 1: return "Active";
        case 2: return "Inactive";
        }
    }
}

这是一个好习惯吗?或者其他东西(例如枚举)更好?

  1. 如果在StaffDto中加入获取status name的逻辑,如果还有一个dtoj(如ADto)也需要显示[=24]怎么办=],那么我必须在 ADto?

    中重写这个逻辑
  2. 如果一个客户端需要显示NewActiveInactive,而另一个客户端需要显示A、[=37怎么办? =] 或 C 或其他东西,那么我应该在 StaffDto 中 return 什么?我还是return New, Active or Inactive in StaffDto,其他客户端需要计算N, A or I 基于 statusId 他们的客户?或者我应该 return 给客户一些别的东西而不是 xxxDto?

我也会像你提到的那样选择 enum,将状态代码绑定到名称 然后,您不必重写 DTO 中的逻辑,让您的模型具有 enum 而不是代码或名称

enum 可以有自己的方法,例如 getShortName 用于不同的表示

enum Status {
    NEW(0), Active(1), InActive(2);
    private final int code;

    Status(int code) {
        this.code = code;
    }

    public String getShortName() {
        return this.name().substring(0, 1).toUpperCase();
    }

    public int getCode() {
        return code;
    }
}