1.問題描述前端
如圖,很顯然,訂單狀態,支付狀態,這種由數字表示其語義的字段,是不該該這麼直接顯示到頁面上,數據庫
例如,0表明新訂單,1表明已下單等等,所以咱們須要進行作一層處理。工具
2.關於流程spa
(1)從數據庫查出數據3d
(2)在代碼邏輯中進行對象的轉換,PO對象轉換爲DTO對象,code
(3)前端拿到DTO對象,顯示在頁面對象
提示:使用枚舉定義常量,對於訂單狀態,支付狀態,都有相應的枚舉類;blog
3.解決方案接口
第一次解決方案get
在好久之前也遇到過這種情況,可是項目裏並無關於狀態常量的定義類,所以在當時,我採用了一個最笨的辦法;
在PO對象與DTO對象的轉換時,也就是從PO對象get字段時,我對取出來的字段進行一層if else判斷,
若是取出來的是「0」,那麼存入DTO對象中爲「新下單」,
不然取出來的是「1」,那麼存入DTO對象中爲「已完成訂單」。。。。。。。。。。。。
這個操做,如今想一想有點傻傻的,哪怕不從代碼可拓展性的角度來看,若是狀態過多,有0,1,2,3,4,5。。。。。,天知道我要作多少個if else;
hahhh,可是隻有經歷過最傻的怎麼寫,纔會有第二次解決方案,第三次解決方案。
第二次解決方案
此次的項目裏使用枚舉來進行常量的定義;
所以,想到了能夠在枚舉類中編寫一個方法:經過code來獲取到對應的枚舉的方法;
問題:在哪裏進行該方法的調用呢
在DTO類中進行該方法的調用;
爲何呢?
由於天知道,其餘地方還有沒有使用這兩個狀態的了,若是有,豈不是還要從新再寫一遍邏輯?所以把調用方法放在DTO類中,也就是根源上;
固然,在DTO類中只是進行一個枚舉類方法的調用,由於DTO類中按照規範是不能夠進行業務邏輯的處理的;
第三次解決方案
問題:對於其餘狀態的枚舉類,好比支付狀態的枚舉類,難道也要再寫一個方法嗎?這豈不是重複寫代碼嗎?
所以,能夠這樣作;
將根據code獲取對應的枚舉的方法,再進行一次抽象,參數上能夠指定枚舉類,進行獲取對應的枚舉;
(1)定義一個接口,將兩個枚舉類實現這個接口
(2)編寫工具類,寫一個抽象的方法
(3)在DTO中調用該方法