国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > 文庫 > 正文

你應該知道的States字段使用規(guī)范

2020-10-29 21:47:09
字體:
供稿:網(wǎng)友

前言

最近在工作中了遇到了一些內(nèi)容,覺著有必要和大家分享下,我們?yōu)榱私y(tǒng)一數(shù)據(jù)庫表的狀態(tài)字段,統(tǒng)一數(shù)據(jù)庫表設(shè)計,簡化字段在程序開發(fā)中的使用方式,下面話不多說了,來一起看看詳細的介紹吧。

解決方式

States對應位域枚舉StatesFlags。

/// <summary> /// 數(shù)據(jù)狀態(tài)枚舉 /// </summary> [Flags] [DataContract] [EnumDescription("狀態(tài)")] public enum StatesFlags {  /// <summary>  /// 可用狀態(tài)  /// </summary>  [XmlEnum("1")]  [EnumDescription("可用")]  [EnumMember]  Enabled = 1,  /// <summary>  /// 停用狀態(tài)  /// </summary>  [XmlEnum("2")]  [EnumDescription("停用")]  [EnumMember]  Disabled = 1 << 1,  /// <summary>  /// 移除(相當于邏輯刪除)  /// </summary>  [XmlEnum("4")]  [EnumDescription("移除")]  [EnumMember]  Removed = 1 << 2,  /// <summary>  /// 已確認(已經(jīng)審核通過)  /// </summary>  [XmlEnum("8")]  [EnumDescription("已確認")]  [EnumMember]  Confirmed = 1 << 3,  /// <summary>  /// 鎖定  /// </summary>  [XmlEnum("16")]  [EnumDescription("鎖定")]  [EnumMember]  Locked = 1 << 4,  /// <summary>  /// 鎖定登錄  /// </summary>  [XmlEnum("32")]  [EnumDescription("鎖定登錄")]  [EnumMember]  LockLogin = 1 << 5 }

業(yè)務(wù)模型使用方式

在業(yè)務(wù)模型中,需要關(guān)注模型的特定狀態(tài)集,寫入新的狀態(tài)時使用模型中的States, 讀取時每一個狀態(tài)獨立提供讀取實現(xiàn)。如下圖中IsRemoved狀態(tài) 以后大家一看代碼就知道這個模型到底有幾個狀態(tài)

///<sumary>  /// 狀態(tài)集,寫  ///</sumary>  public StatesFlags States { get; set; }  /// <summary>  /// 只讀  /// </summary>  public bool IsRemoved => States.HasFlag(StatesFlags.Removed);

StatesFlags的4個擴展方法

/// <summary> /// 數(shù)據(jù)狀態(tài)枚舉 /// </summary> public static class StatesFlagsExtends {  /// <summary>  /// 設(shè)置可用  /// </summary>  /// <param name="states">狀態(tài)</param>  public static StatesFlags SetEnable(this StatesFlags states)  {   if (states.HasFlag(StatesFlags.Disabled)) states = states ^ StatesFlags.Disabled;   if (!states.HasFlag(StatesFlags.Enabled)) states = states | StatesFlags.Enabled;   return states;  }  /// <summary>  /// 設(shè)置停用  /// </summary>  /// <param name="states">狀態(tài)</param>  public static StatesFlags SetDisable(this StatesFlags states)  {   if (states.HasFlag(StatesFlags.Enabled)) states = states ^ StatesFlags.Enabled;   if (!states.HasFlag(StatesFlags.Disabled)) states = states | StatesFlags.Disabled;   return states;  }  /// <summary>  /// 移除狀態(tài)  /// </summary>  /// <param name="states">狀態(tài)</param>  /// <param name="state">要移除的狀態(tài)</param>  public static StatesFlags RemoveState(this StatesFlags states, StatesFlags state)  {   //也可以通過如下計算去除一個狀態(tài)states = states & ~StatesFlags.Disabled;   return states ^ state;  }  /// <summary>  /// 附加狀態(tài)  /// </summary>  /// <param name="states">狀態(tài)</param>  /// <param name="state">要附加的狀態(tài)</param>  public static StatesFlags AttachState(this StatesFlags states, StatesFlags state)  {   return states | state;  } }

由于Enable和Disable是互斥的,所以對應有SetDisable、SetEnable 。其它非互斥狀態(tài) 提供 AttachState、RemoveState用于附加或移除狀態(tài)。 如出現(xiàn)新的狀態(tài)在StatesFlags中添加,狀態(tài)為位域枚舉,使用連續(xù)的數(shù)字移位操作,增加代碼可讀性。

附擴展方式測試代碼

[TestClass] public class StatesFlagsTest {  [TestMethod]  public void TestStatesExtends()  {   //賦初值 在用、鎖定、移除   var state = StatesFlags.Enabled | StatesFlags.Locked | StatesFlags.Removed;   //調(diào)用SetDisable方法,設(shè)為停用   state = state.SetDisable();   Assert.IsTrue(!state.HasFlag(StatesFlags.Enabled));   Assert.IsTrue(state.HasFlag(StatesFlags.Disabled));   //調(diào)用SetEnable方法,設(shè)為在用   state = state.SetEnable();   Assert.IsTrue(state.HasFlag(StatesFlags.Enabled));   Assert.IsTrue(!state.HasFlag(StatesFlags.Disabled));   //調(diào)用RemoveState方法,移除狀態(tài)   state = state.RemoveState(StatesFlags.Locked);   Assert.IsTrue(!state.HasFlag(StatesFlags.Locked));   Assert.IsTrue(state.HasFlag(StatesFlags.Removed));   //調(diào)用AttachState方法,附加狀態(tài)   state = state.AttachState(StatesFlags.Confirmed);   Assert.IsTrue(state.HasFlag(StatesFlags.Confirmed));   //直接調(diào)用方法,不賦值不能改變states的值   state.AttachState(StatesFlags.Locked);   Assert.IsTrue(!state.HasFlag(StatesFlags.Locked));  } }

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南投市| 衢州市| 云安县| 什邡市| 高雄市| 嘉峪关市| 永善县| 桐梓县| 玛纳斯县| 泰和县| 普洱| 苗栗市| 青川县| 六安市| 平阴县| 丰城市| 体育| 乃东县| 江阴市| 永和县| 疏附县| 鹤山市| 吴桥县| 丘北县| 乌拉特前旗| 渝北区| 邢台市| 阿拉善盟| 岳阳县| 常宁市| 红河县| 平远县| 博白县| 盘锦市| 明水县| 宾川县| 天镇县| 宣城市| 宁津县| 钟山县| 辉县市|