中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

EF架構~DefaultValue讓(rang)我的UnitOfWork更(geng)可讀(du)

回到目錄

在編程世界里,使用“否定式”不是一件好事,因為它的可讀性并不高,但有時,為了(le)讓使用者減(jian)少(shao)代碼量,還是使用了(le)雙重否定,直(zhi)到(dao)DefaultValue的出現,它改變了(le)這一切,它可以為你的屬性設置(zhi)你想要的默(mo)認值,如bool類型(xing)默(mo)認值是false,而如果你希望它的默(mo)認值是true,就需要用到(dao)DefaultValue這個特性了(le)。

這是我IUnitOfWork代(dai)碼(ma)片(pian)斷(duan)

   /// <summary>
    /// 工作單元
    /// 提供一個保存方法,它(ta)可以對調用層公(gong)開,為了減少(shao)連(lian)庫次(ci)數(shu)
    /// </summary>
    public interface IUnitOfWork
    {
        /// <summary>
        /// 將操作(zuo)提交到(dao)數據(ju)庫,
        /// </summary>
        void Save();
        /// <summary>
        /// 是否不提交到數據庫
        /// 默(mo)認為false,即默(mo)認為提交到數據庫
        /// </summary>
        /// <returns></returns>
        bool IsNotSubmit { get; set; }
    }

    /// <summary>
    /// 工作單元
    /// 對泛型類型的支(zhi)持
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public interface IUnitOfWork<T> : IUnitOfWork where T : class { }

上(shang)面代碼的(de)IsNotSubmit就是一個否定式的(de),這不(bu)是我們推薦的(de),但沒(mei)辦法,使(shi)用它,可(ke)以簡化(hua)代碼!它的(de)意思(si)是不(bu)把(ba)修(xiu)改(gai)提交到數據(ju)庫,bool類型默(mo)認是false

,也(ye)就是(shi)說,它默認是(shi)把修改(gai)提交的數據庫(ku),怎么樣,挺繞吧,呵呵。

當DefaultValue出現(xian)后,就改(gai)變(bian)了這一切(qie),你可以這樣定(ding)義它了

  public interface IUnitOfWork
    {
        /// <summary>
        /// 將操作提(ti)交到數(shu)據(ju)庫,
        /// </summary>
        void Save();
        /// <summary>
        /// 是否(fou)提交(jiao)到數據庫
        /// 默認為true,即(ji)默認為提交到數據庫
        /// </summary>
        /// <returns></returns>
        [DefaultValue(true)]
        bool IsSubmit { get; set; }

    }

這樣的接(jie)口定義意思就很清(qing)晰了,IsSubmit就是提交,true就是提交,false就是不(bu)提交,多清(qing)晰呀,呵呵!

再(zai)來(lai)看(kan)如何得到IsSubmit的值(zhi),如果(guo)直接使用它結果(guo)還會是false,你需要反射一下(xia),從TypeDescriptor里得到它的值(zhi)才是DefaultValue,呵呵 

     /// <summary>
        /// 數據上下(xia)文(wen)
        /// </summary>
        class DataContext : IUnitOfWork
        {
            #region IUnitOfWork 成員

            public void Save()
            {
                throw new NotImplementedException();
            }
            /// <summary>
            /// 類不會(hui)繼承接(jie)口的(de)特(te)性信(xin)息
            /// </summary>
            [DefaultValue(true)]
            public bool IsSubmit
            {
                get;
                set;
            }

            #endregion
        }

好,我(wo)們現在輸出一下(xia)信息(xi),看(kan)看(kan)IsSubmit的值

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

結果:

怎么樣,現在程序中可以把否定式(shi)去掉了吧(ba),呵(he)呵(he) 

而將這個技術應(ying)用到(dao)我(wo)們(men)的架構中,可以這樣來實現:(如(ru)果為IsSubmit設置了新(xin)值(zhi),就(jiu)(jiu)使用新(xin)值(zhi),如(ru)果沒有設置,那就(jiu)(jiu)用默(mo)認值(zhi),大家可以使用default(bool)得到(dao)bool類型的默(mo)認值(zhi),同理default(string)就(jiu)(jiu)是字符(fu)型的)

        private bool isSubmit;
            /// <summary>
            /// 類不(bu)會繼承接口的(de)特性信(xin)息
            /// </summary>
            [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;
                }
            }

 

回到目錄

posted @ 2013-08-26 16:53  張占嶺  閱讀(3496)  評論(4)    收藏  舉報