網站首頁 編程語言 正文
在項目中,有時候會用到領域枚舉和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
相關推薦
- 2022-02-24 antv/g2圖表tooltip自定義并展示坐標之外的數據
- 2023-01-07 利用Linux?Find命令快速查找文件方法_linux shell
- 2022-10-31 Rust?實現?async/await的詳細代碼_相關技巧
- 2022-07-28 Python網絡編程之socket與socketserver_python
- 2022-05-17 ubuntu切換python版本解決語法不匹配問題(SyntaxError: invalid syn
- 2022-05-20 springCloud_Nacos服務搭建
- 2022-09-15 Android自定義ViewGroup實現選擇面板_Android
- 2022-07-01 .NET設計模式之UML類圖介紹_基礎應用
- 最近更新
-
- 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同步修改后的遠程分支