一個存儲驗證資訊的公用類:
/// <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就可以了,哈哈!