层间枚举的java映射
我有一个服务和这个服务的api。该服务有一个枚举,比如说有20个值。但我的API只有10个。我要做的是将我的20个服务枚举映射到我的10个api枚举。但是假设有人改变了服务的枚举?有人添加了10个值,所以我们现在有30个枚举,但忘记/不知道如何更改映射。然后我们有10个从未到达客户端的未映射枚举。有没有可能在两个枚举之间设计一个映射,这样,如果其中任何一个发生了更改,那么我们就会得到一个编译时错误,该错误表示存在未映射的枚举值?还是我在这里的想法很错误?也许单元测试是确保枚举中的所有值都映射到另一个值的方法
编辑:
服务枚举将具有更具技术性的枚举,而api枚举将仅具有更具逻辑性的值
服务枚举:
- JPA_错误(“描述”)
- 数据库关闭
- 无效的东西
- 有东西过期了
- 服务不可用
API枚举:
- 无效的东西
- 有东西过期了
- 服务不可用
我今天的映射只是一个函数,它将服务枚举作为参数,并有一个基本的switch语句。在默认语句中,我返回null,这就是困扰我的地方。我不喜欢返回null,但我也不知道默认语句应该有什么样的行为。这就是为什么我开始考虑是否可以“强制”开发人员始终确保映射是正确的
function ApiEnum mapServiceEnumToApiEnum(ServiceEnum serviceEnum){
switch(serviceEnum){
case JPA_ERROR:
return ApiEnum.SOMETHING_INVALID;
case DATABASE_DOWN:
return ApiEnum.SOMETHING_INVALID;
default:
return null; //Don't want this to happen...
}
# 1 楼答案
这是一个抽象的问题,我不知道如何将服务枚举映射到枚举,所以很难说什么最有意义。但你提到的方法是合理的
未映射枚举异常
您当然可以检查枚举是否未映射,然后抛出异常。如果您希望在未映射枚举的情况下请求失败,那么这可能是正确的方法
记录的未映射枚举
如果您不希望请求失败,您只想注意到存在未映射的枚举,您可以记录它。当然,这是假设您实际查看日志的频率足以检测到此日志消息。如果不是的话,日志记录通常只是更多的噪音
测试映射
如果不了解架构的更多信息,就很难说任何可以对照您的枚举值检查服务枚举值的测试是否真的是单元测试。如果你正在处理一个远程服务,它将更多地是一个集成测试,这种集成测试可能会因为其他原因失败,比如如果测试机器失去与远程服务的连接。不过,这可能是一种比日志消息更容易注意到的方法