網站首頁 編程語言 正文
在項目中,有時候會用到領域枚舉和DTO枚舉的映射和轉換。有一個現實的問題是:如果領域枚舉項發生變化,而DTO枚舉項沒有及時更新,這樣會造成映射不上的問題。那么,如何避免此類問題呢?
先看領域枚舉和DTO枚舉映射完好的情況。
class Program
{
static void Main(string[] args)
{
var queryOrderStatus = (QueryOrderStatus)OrderState.Active;
Console.WriteLine(queryOrderStatus);
Console.ReadKey();
}
}
public enum OrderState
{
NotActivated,
Active,
RequiresReActivation
}
public enum QueryOrderStatus
{
NotActivated,
Active,
RequiresReActivation
}
輸出結果:Active
假如,我們在領域模型中加了一個枚舉項
public enum OrderState
{
NotActivated,
Active,
RequiresReActivation,
Locked
}
在客戶端。
class Program
{
static void Main(string[] args)
{
var queryOrderStatus = (QueryOrderStatus)OrderState.Locked;
Console.WriteLine(queryOrderStatus);
Console.ReadKey();
}
}
輸出結果:3
如果再把客戶端改成這樣:
class Program
{
static void Main(string[] args)
{
var queryOrderState = (QueryOrderStatus)OrderState.Locked;
if(queryOrderState == QueryOrderStatus.Active)
Console.WriteLine("Active");
if(queryOrderState == QueryOrderStatus.NotActivated)
Console.WriteLine("NotActivated");
if(queryOrderState == QueryOrderStatus.RequiresReActivation)
Console.WriteLine("RequiresReActivation");
Console.ReadKey();
}
}
輸出結果:什么都沒有
也就是說,在領域枚舉發生變化的時候,DTO枚舉沒有適時更新,會造成映射不上的問題。如何避免呢?
--使用Enum.TryParse()實現枚舉的安全轉換
使用Enum.TryParse(),把客戶端改成:
class Program
{
static void Main(string[] args)
{
var domainState = OrderState.Locked;
QueryOrderStatus queryState;
if (!Enum.TryParse(domainState.ToString(), out queryState))
{
throw new FormatException("枚舉項 '"+domainState+"' 在對應的DTO中不存在" );
}
Console.ReadKey();
}
}
運行報錯:
這正是我們預設的報錯方式。
原文鏈接:https://www.cnblogs.com/darrenji/p/3852737.html
相關推薦
- 2023-06-04 Kotlin比較與解釋Lazy與Lateinit的用法_Android
- 2022-01-16 1.把字符串轉化為時間戳,再將時間戳轉化為Date對象 /** *@parame time = 2
- 2023-11-12 Check failed: top_shape[j] == bottom[i]->shape(j)
- 2023-07-22 SpringBoot中@Cacheable如何使用
- 2022-09-20 Python處理時間戳和時間計算等的腳本分享_python
- 2022-05-21 Unity為軟件添加使用有效期的具體步驟_C#教程
- 2022-08-20 Linux中sftp常用命令整理_linux shell
- 2023-11-19 樹莓派/arm設備上安裝火狐Firefox瀏覽器
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支