博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF架构~DefaultValue让我的UnitOfWork更可读
阅读量:6576 次
发布时间:2019-06-24

本文共 2789 字,大约阅读时间需要 9 分钟。

在编程世界里,使用“否定式”不是一件好事,因为它的可读性并不高,但有时,为了让使用者减少代码量,还是使用了双重否定,直到DefaultValue的出现,它改变了这一切,它可以为你的属性设置你想要的默认值,如bool类型默认值是false,而如果你希望它的默认值是true,就需要用到DefaultValue这个特性了。

这是我IUnitOfWork代码片断

   ///     /// 工作单元    /// 提供一个保存方法,它可以对调用层公开,为了减少连库次数    ///     public interface IUnitOfWork    {        ///         /// 将操作提交到数据库,        ///         void Save();        ///         /// 是否不提交到数据库        /// 默认为false,即默认为提交到数据库        ///         /// 
bool IsNotSubmit { get; set; } } /// /// 工作单元 /// 对泛型类型的支持 /// ///
public interface IUnitOfWork
: IUnitOfWork where T : class { }

上面代码的IsNotSubmit就是一个否定式的,这不是我们推荐的,但没办法,使用它,可以简化代码!它的意思是不把修改提交到数据库,bool类型默认是false

,也就是说,它默认是把修改提交的数据库,怎么样,挺绕吧,呵呵。

当DefaultValue出现后,就改变了这一切,你可以这样定义它了

  public interface IUnitOfWork    {        ///         /// 将操作提交到数据库,        ///         void Save();        ///         /// 是否提交到数据库        /// 默认为true,即默认为提交到数据库        ///         /// 
[DefaultValue(true)] bool IsSubmit { get; set; } }

这样的接口定义意思就很清晰了,IsSubmit就是提交,true就是提交,false就是不提交,多清晰呀,呵呵!

再来看如何得到IsSubmit的值,如果直接使用它结果还会是false,你需要反射一下,从TypeDescriptor里得到它的值才是DefaultValue,呵呵 

     ///         /// 数据上下文        ///         class DataContext : IUnitOfWork        {            #region IUnitOfWork 成员            public void Save()            {                throw new NotImplementedException();            }            ///             /// 类不会继承接口的特性信息            ///             [DefaultValue(true)]            public bool IsSubmit            {                get;                set;            }            #endregion        }

好,我们现在输出一下信息,看看IsSubmit的值

      AttributeCollection attrColl = TypeDescriptor.GetProperties(new DataContext())["IsSubmit"].Attributes;            DefaultValueAttribute attr = attrColl[typeof(DefaultValueAttribute)] as DefaultValueAttribute;            bool _Value = (bool)attr.Value;            Console.WriteLine(_Value);

结果:

怎么样,现在程序中可以把否定式去掉了吧,呵呵 

而将这个技术应用到我们的架构中,可以这样来实现:(如果为IsSubmit设置了新值,就使用新值,如果没有设置,那就用默认值,大家可以使用default(bool)得到bool类型的默认值,同理default(string)就是字符型的)

       private bool isSubmit;            ///             /// 类不会继承接口的特性信息            ///             [DefaultValue(true)]            public bool IsSubmit            {                get { return isSubmit; }                set                {                    AttributeCollection attrColl = TypeDescriptor.GetProperties(this)["IsSubmit"].Attributes;                    DefaultValueAttribute attr = attrColl[typeof(DefaultValueAttribute)] as DefaultValueAttribute;                    if (value == default(bool))                        isSubmit = (bool)attr.Value;                    else                        isSubmit = value;                }            }

 本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
这是歌手,马云
查看>>
泰国商家频繁被问是否支持手机付款,竟向游客放大招!
查看>>
30PB数据1年内迁移到Spark,eBay的经验有何可借鉴之处?
查看>>
你不可不知的GopherChina大咖讲师们
查看>>
余承东再会张近东 战略合作升级点燃818第一把火
查看>>
蚂蚁金服董事长彭蕾开微博 支付宝小编差点惹祸遭劝退
查看>>
拥有华为Mate 9,无需健身房自己练一样有效
查看>>
开启千元快充时代 魅族发布魅蓝5s 售价799元起
查看>>
趣店季报图解:营收环比降14% 大白汽车收入近6亿
查看>>
人民币中间价“四连涨”迫近6.6区间 创逾半年新高
查看>>
Java开发者该如何选择合适的NoSQL?
查看>>
广西龙胜一村寨旅游扶贫年终分红670万元
查看>>
统计局:居民睡觉休息平均时间为9小时19分钟
查看>>
月薪3万的开发利器
查看>>
2019陕州迎新春灯会吸引民众参观
查看>>
脱欧协议表决惨败 特雷莎·梅仅剩24小时保住首相位
查看>>
北京卫视推新节目《向往的星居》明星参与改造住房
查看>>
大数据技术,Spark核心技术之运行原理
查看>>
数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 解析(三)之查询SQL解析...
查看>>
使用 ASDK 性能调优 - 提升 iOS 界面的渲染性能
查看>>