天天看點

一個使用者實體應該有它自己的實體驗證,即一個實體應該有它的屬性,方法,擴充屬性及驗證機制組成

一個存儲驗證資訊的公用類:

   /// <summary> 

    /// 驗證資訊實體類 

    /// </summary> 

    public class RuleViolation 

    { 

        /// <summary> 

        /// 屬性名,only support contruction method set it 

        /// </summary> 

        public string PropertyName { get; private set; } 

        /// 錯誤資訊 

        public string ErrorMessage { get; private set; } 

        /// 為錯誤資訊指派 

        /// <param name="errorMessage"></param> 

        public RuleViolation(string errorMessage) 

        { 

            this.ErrorMessage = errorMessage; 

        } 

        /// 為指定屬性賦錯誤資訊 

        /// <param name="propertyName"></param> 

        public RuleViolation(string propertyName, string errorMessage) 

            this.PropertyName = propertyName; 

    }

一個要實作的驗證功能的接口

 /// <summary> 

    /// 資料實體驗證統一接口 

    public interface IEntity 

        /// 驗證是否成功 

        bool IsValid { get; } 

        /// 如果GetRuleViolation傳回的疊代數大于0,則IsValid指派為假 

        /// <returns></returns> 

        IEnumerable<RuleViolation> GetRuleViolation(); 

當這個接口被實作後,可以使用IsValid方法來判斷你的實體是否滿足條件!!!聽起來有點抽象,現在我把它具體一下吧!

首先來一個實體對象

public partial class User:IEntity

{

  public String UserID { get; set; } 

  public String UserName { get; set; }

}

   public partial class UserBase : IEntity 

       public bool IsValid 

            get { return (GetRuleViolations().Count() == 0); } 

        public IEnumerable<RuleViolation> GetRuleViolations() 

            if (String.IsNullOrEmpty(this.UserID)) 

                yield return new RuleViolation("不能為空", "UserID"); 

            if (!XValidator.IsRealLengthValid(this.UserID, 2, 12)) 

                yield return new RuleViolation("至少要有2個字元,同時不能多于12個字元", "UserID");

        }

   }

OK了,這樣我們在使用User類時,如果要判斷是指派的是否合法,直接使用User.IsValid就可以了,哈哈!