利用列舉進行狀態的設計

2022-02-06 20:08:22 字數 1181 閱讀 5968

在上一家公司的時候,髮像乙個很不好的地方,那就是乙個實體的狀態使用int來表示。個人覺的主要有以下一些缺點。

列舉的優點:

1、雖然int是c#中的強型別,但int不是業務邏輯的強型別,但列舉可以實現業務邏輯的強型別。

比如說乙個訂單的狀態如果使用列舉的話,那麼就能確定它能安全的表示這些狀態,而如果直接使用數字就可能導致這個數字不能正確的表示這些狀態。

2、程式**的可讀性變差,別人在閱讀或修改的時候要不斷的看著那一段對於數字的解釋說明。

狀態.新單 應該要比 0 來的容易理解

if(status==orderstatus.finnish) 要比 if(status=3)來的容易理解吧。。。

3、狀態不能進行組合,使的狀態變的非常多。

比如一條需要審批的記錄,它的審批結果有(通過和拒絕),然後需要審批的a級、b級、c級、d級、e級

使用數字來表示需要 2*5=10種。而使用列舉狀態來則需要2+5=7種,而且可以進行運算。

\\……其他的以後想到在補充·····

列舉的運算:

列舉可以和int進行相互轉換,所以列舉的預算實際上就是int的位運算。

列舉的或運算(  |  ):以前學c的時候被老師騙的好慘啊,把乙個個數字進行分解成2進製,然後在紙上對齊再一位一位的進行或運算。然後再反算成十進位制的數字。其實還有一些竅門,大家都學過集合吧,我們可以把乙個數字看成是以2^n(n>=0)為元素的集合。比如說7=

21=這樣轉換為2進製也很容易21就是(10101)。大家理解了上面就很容易計算數字的或運算了。或預算實際上就是我們集合中的並(∪)運算、或運算。比如:7 | 21==23 ,如果是2^n(n>=0)那就更容易算了,就是將這兩個數相加。如 128|64=128+64=192

列舉的與預算( & ):列舉的與運算實際上就是數學集合中的交(與)(∩)。如21&7==5,128&64={}=0

列舉的異或運算( ^ ):列舉的異或操作實際上是 交集的非   (並集-交集) 。如 21^7==18 簡單點就是(21|7)-(21&7)=18

列舉運算的運用:

比如一條需要審批的記錄,它的審批結果有(通過和拒絕),然後需要審批的a級、b級、c級、d級、e級

現在要表示c級拒絕就:status.拒絕|status.c

如何查詢d級通過就是 status&(status.allow|status.c)==(status.allow|status.c)

React和Vue進行狀態管理的區別

前端例項資料共享,vue有vuex而react則有redux,mobx等等。使用vuex進行狀態管理 我們現在vue專案,均採用vuex來做全域性的狀態管理,簡單的理解就是你在state中定義了乙個資料之後,你可以在所在專案中的任何乙個元件裡進行獲取 進行修改,並且你的修改可以得到全域性的響應變更,...

執行緒的執行狀態

執行緒從建立 執行到結束總是處於5種狀態之一 分別是新建狀態,就緒狀態,執行狀態,阻塞狀態,死亡狀態。這5種狀態之間的轉換流程如圖 新建狀態 當成功建立乙個執行緒,但是還未呼叫start方法之前的狀態,例如 thread thread new thread new runnable catch in...

執行緒的執行狀態

1,建立 當建立好執行緒物件的時候,也就是new thread類或者是new thread子類的時候。此時稱為建立狀態 2,就緒 當執行緒物件呼叫了start 方法,開啟執行緒了的時候,此時的執行緒已經開啟了,隨時可能會被cpu執行,因為cpu一此只能執行乙個執行緒,當其他執行緒已經開起了,但還沒有...