一个用户实体应该有它自己的实体验证,即一个实体应该有它的属性,方法,扩展属性及验证机制组成
一个存储验证信息的公用类:
/// <summary>
/// 验证信息实体类
/// </summary>
public class RuleViolation
{
/// <summary>
/// 属性名,only support contruction method set it
/// </summary>
public string PropertyName { get; private set; }
/// <summary>
/// 错误信息
/// </summary>
public string ErrorMessage { get; private set; }
/// <summary>
/// 为错误信息赋值
/// </summary>
/// <param name="errorMessage"></param>
public RuleViolation(string errorMessage)
{
this.ErrorMessage = errorMessage;
}
/// <summary>
/// 为指定属性赋错误信息
/// </summary>
/// <param name="propertyName"></param>
/// <param name="errorMessage"></param>
public RuleViolation(string propertyName, string errorMessage)
{
this.PropertyName = propertyName;
this.ErrorMessage = errorMessage;
}
}
一个要实现的验证功能的接口
/// <summary>
/// 数据实体验证统一接口
/// </summary>
public interface IEntity
{
/// <summary>
/// 验证是否成功
/// </summary>
bool IsValid { get; }
/// <summary>
/// 如果GetRuleViolation返回的迭代数大于0,则IsValid赋值为假
/// </summary>
/// <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就可以了,哈哈!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示