一个存储验证信息的公用类:

/// <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就可以了,哈哈!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:一个用户实体应该有它自己的实体验证,即一个实体应该有它的属性,方法,扩展属性及验证机制组成,如需转载请自行联系原博主。

一个用户实体应该有它自己的实体验证,即一个实体应该有它的属性,方法,扩展属性及验证机制组成...相关推荐

  1. linux中添加一个用户到指定用户组的两种方式,修改一个用户到指定用户组的一种方式...

    添加一个用户到指定用户组: gpasswd –a 用户名 组名 usermod –G 组名 用户名 //第一种:gpasswd –a 用户名 组名 [root@localhost ~]# id use ...

  2. 另一个用户已连接到此计算机,如何远程控制另一台电脑 远程控制另一台电脑方法【详解】...

    如何远程控制另一台电脑? 如果是2003的系统或XP的系统的话就用windows的远程桌面功能!右击我的电脑,属性,远程,远程桌面里的框里打勾,然后选择选择远程用户管理员的话不用选,管理员已经有权限了 ...

  3. oracle 新建一个用户和赋予权限

    --1.新建个用户 create user qzj_xian_test identified by qzj_xian_test; --因为新建的用户和默认的用户是锁住的,没有权限.所以新建用户后要给用 ...

  4. 《OEA - 实体扩展属性系统 - 设计方案说明书》

    这篇设计文档是 12 月份写来参加公司的研发峰会的,自己倒是信心满满,不过最后还是没有入围.现在想想也没啥大用,所以贴出来,期待与园友交流. 文档有点长,没全部贴在博客中,有兴趣的可以下载附件中的 P ...

  5. 如何创建一个用户、授权操作k8s集群的过程?

    本篇带给大家如何创建一个用户.授权操作k8s集群的过程.希望对你有所帮助! 背景 172.16.99.128是的我k8s集群的master节点,此处是从这里获取集群的证书. 创建访问architech ...

  6. 【用户画像】标签任务开发流程(源码之实体类、工具类、配置文件、DAO层)

    文章目录 一 代码实现 0 开发主线 1 实体类 (1)TagInfo (2)TaskInfo (3)TaskTagRule 2 工具类 (1)连接sql的工具类 测试 (2)专门读取properti ...

  7. linux用户在哪个文件夹,LINUX中用命令成功建立一个用户后信息会记录在哪个文件中...

    LINUX中用命令成功建立一个用户后信息会记录在哪个文件中 发布时间:2007-07-28 10:14:57来源:红联作者:MPiops 增加用户帐号后 新建用户的命令十分简单,在命令行下使用 use ...

  8. oracle 被另一用户锁定,Oracle报错记录被另外一个用户锁定的解决方案

    原因 当一个用户对数据进行修改时,若没有进行提交或者回滚,Oracle不允许其他用户修改该条数据,在这种情况下修改,就会出现:"记录被另外一个用户锁定"错误. 解决 查询用户.数据 ...

  9. Linux环境下编写一个shell程序,此程序的功能:随机生成一个1-100的数(答案)让用户猜

    题目:编写一个shell程序,此程序的功能:随机生成一个1-100的数(答案)让用户猜,如果用户猜的数大于答案,则提示大了,如果用户猜的数小于答案,则提示小了.当用户猜对时提示:猜对了. #! /bi ...

最新文章

  1. C语言 函数(做个笔记)
  2. 世界人工智能大赛方案解析!
  3. c语言fac函数求n的阶乘,急求C语言编辑题:Cnm=n!/m!(n-m)!其中n,m 由键盘输入。要求设计一个函数fac(n)求某个正整数n 的阶乘。...
  4. 深入理解 C 指针阅读笔记 -- 第四章
  5. 基于Pytorch再次解析AlexNet现代卷积神经网络
  6. Python封装发送信息到钉钉群
  7. 分布式系统——zabbix 用 onealert实现报警、agent主动模式、proxy代理
  8. mybatis-plus代码生成器使用和代码
  9. path.join 与 path.resolve 的区别
  10. java线程夯住了怎么解决,不明白线程为什么卡住了? 求大神解救
  11. 3制造数据集_基于MBD的产品设计制造技术研究
  12. spring中定时器的使用
  13. Linux Kobject
  14. js获取文件的后缀名
  15. 编译器与解释器的区别和工作原理
  16. 上海自考计算机基础实践,上海自考00019计算机应用基础实践考核考试大纲
  17. 搭建syslog日志服务器
  18. HTML5 之 Link 标签
  19. QScrollArea手指触摸屏滑动
  20. android只编译release版本

热门文章

  1. java optional 用法_Java8 中的 Optional 相关用法
  2. java文件上传_Java文件上传细讲
  3. 第十六届全国大学生智能车竞赛赛题规划
  4. P5压电陶瓷致动器,纵向极化,叠堆压电陶瓷,多层压电陶瓷促动器
  5. html模板编辑器,可视化编辑网站模板
  6. mysql blob 比较_MySQL下,text 、blob的比较
  7. elf section类型_ELF文件解析(一):Segment和Section
  8. java寻找最大的字母_【LeetCode(Java) - 744】寻找比目标字母大的最小字母
  9. mysql 主被切换_mysql 主从切换
  10. Linux启动跟windows启动,Windows,Linux启动机制简介