States字段使用规范有哪些
发表于:2023-02-07 作者:安全数据网编辑
编辑最后更新 2023年02月07日,States字段使用规范有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。解决方式States对应位域枚举States
States字段使用规范有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
解决方式
States对应位域枚举StatesFlags。
////// 数据状态枚举 /// [Flags] [DataContract] [EnumDescription("状态")] public enum StatesFlags { ////// 可用状态 /// [XmlEnum("1")] [EnumDescription("可用")] [EnumMember] Enabled = 1, ////// 停用状态 /// [XmlEnum("2")] [EnumDescription("停用")] [EnumMember] Disabled = 1 << 1, ////// 移除(相当于逻辑删除) /// [XmlEnum("4")] [EnumDescription("移除")] [EnumMember] Removed = 1 << 2, ////// 已确认(已经审核通过) /// [XmlEnum("8")] [EnumDescription("已确认")] [EnumMember] Confirmed = 1 << 3, ////// 锁定 /// [XmlEnum("16")] [EnumDescription("锁定")] [EnumMember] Locked = 1 << 4, ////// 锁定登录 /// [XmlEnum("32")] [EnumDescription("锁定登录")] [EnumMember] LockLogin = 1 << 5 }
业务模型使用方式
在业务模型中,需要关注模型的特定状态集,写入新的状态时使用模型中的States, 读取时每一个状态独立提供读取实现。如下图中IsRemoved状态 以后大家一看代码就知道这个模型到底有几个状态
////// 状态集,写 /// public StatesFlags States { get; set; } ////// 只读 /// public bool IsRemoved => States.HasFlag(StatesFlags.Removed);
StatesFlags的4个扩展方法
////// 数据状态枚举 /// public static class StatesFlagsExtends { ////// 设置可用 /// /// 状态 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; } ////// 设置停用 /// /// 状态 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; } ////// 移除状态 /// /// 状态 /// 要移除的状态 public static StatesFlags RemoveState(this StatesFlags states, StatesFlags state) { //也可以通过如下计算去除一个状态states = states & ~StatesFlags.Disabled; return states ^ state; } ////// 附加状态 /// /// 状态 /// 要附加的状态 public static StatesFlags AttachState(this StatesFlags states, StatesFlags state) { return states | state; } }
由于Enable和Disable是互斥的,所以对应有SetDisable、SetEnable 。其它非互斥状态 提供 AttachState、RemoveState用于附加或移除状态。 如出现新的状态在StatesFlags中添加,状态为位域枚举,使用连续的数字移位操作,增加代码可读性。
附扩展方式测试代码
[TestClass] public class StatesFlagsTest { [TestMethod] public void TestStatesExtends() { //赋初值 在用、锁定、移除 var state = StatesFlags.Enabled | StatesFlags.Locked | StatesFlags.Removed; //调用SetDisable方法,设为停用 state = state.SetDisable(); Assert.IsTrue(!state.HasFlag(StatesFlags.Enabled)); Assert.IsTrue(state.HasFlag(StatesFlags.Disabled)); //调用SetEnable方法,设为在用 state = state.SetEnable(); Assert.IsTrue(state.HasFlag(StatesFlags.Enabled)); Assert.IsTrue(!state.HasFlag(StatesFlags.Disabled)); //调用RemoveState方法,移除状态 state = state.RemoveState(StatesFlags.Locked); Assert.IsTrue(!state.HasFlag(StatesFlags.Locked)); Assert.IsTrue(state.HasFlag(StatesFlags.Removed)); //调用AttachState方法,附加状态 state = state.AttachState(StatesFlags.Confirmed); Assert.IsTrue(state.HasFlag(StatesFlags.Confirmed)); //直接调用方法,不赋值不能改变states的值 state.AttachState(StatesFlags.Locked); Assert.IsTrue(!state.HasFlag(StatesFlags.Locked)); } }
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
c语言网络技术和编程语言总结
c语言对应的三级考试网络技术
网站服务器后台如何加防护密码
c语言软件开发步骤
c语言中网络技术知识点
服务器对权限提升的防护措施
怎么在阿里云租服务器
黑苹果能做web服务器吗
c语言和网络技术哪个好考
云服务器2核4G是什么性能
证监会 数据库
企业网络技术服务介绍
论坛数据库结构
上海网络软件开发
深圳市猫贝网络技术有限公司
国家 网络安全 信息
ppt怎么用网络技术计划
网络安全cstc
数据库实现乐观锁
数据库数据提交
pg 数据库 表大小
章丘mrp管理软件开发公司
服务器修改风扇
河源通信软件开发回收价
数据库exec是啥
计算机网络技术的课程目标
甲骨文db数据库
安全生产软件开发预期效益
cnki数据库英文全称
软件开发必用的软件
爱易网络技术培训
个人软件开发怎么赚钱
查询mysql数据库
银捷互联网科技
网络安全体现在多网合一
网络安全的第三个时代
数据库行锁并发问题
三友联众招聘软件开发工资
数据库优化视频教程
网络安全与防范论文答辩
- 上一篇
mysql如何解决delete删除记录数据库空间不减少问题
这篇文章主要介绍了mysql如何解决delete删除记录数据库空间不减少问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、使用 O
- 下一篇
ORA-12899: value too large for column ORG_NAME (actual: 145, maximum: 128)
导入数据时报错以下错误,这是因为原来的数据库是GBK的,每个汉字两个字节,但新数据库是AL32UTF8的,每个汉字是三个字节,导致超过长度了。ORA-12899: value too large fo