利用枚舉進行狀態的設計

來源:互聯網
上載者:User
在上一家公司的時候,發像一個很不好的地方,那就是一個實體的狀態使用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={1,2,4}
21={16+4+1}這樣轉換為2進位也很容易21就是(10101)。大家理解了上面就很容易計算數位或運算了。或預算實際上就是我們集合中的並(∪)運算、或運算。比如:7 | 21={16,4,2,1}=23 ,如果是2^n(n>=0)那就更容易算了,就是將這兩個數相加。如 128|64=128+64=192

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

枚舉的異或運算( ^ ):枚舉的異或操作實際上是 交集的非   (並集-交集) 。如 21^7={16,2}=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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.