zoukankan      html  css  js  c++  java
  • 说说底层架构之实体类的设计

     

    首先,那要和真实数据表一一对应,必要的话,可以对类型抽象化,可以引入枚举,泛型列表等类型;其次,对实体要集成它的数据有效性的验证功能;再次,为了数据操作方便,有必要去引入数据表字段的列举集合;综上所述,我们来设计一个用户表实体;

    本例中的知识点为:部分类,接口规范,Flag属性的枚举,迭代器等

         /// <summary>
        /// 数据实体统一接口
        /// </summary>
        public interface IDataEntity
        {
        }
         /// <summary>
        /// 用户实体
        /// </summary>
        partial class UserBase : IDataEntity
        {
            public string UserName { get; set; }
            public int Age { get; set; }
        }
         /// <summary>
        /// 实体验证类
        /// </summary>
        public class RuleViolation
        {
            /// <summary>
            /// 错误属性
            /// </summary>
            public string ErrProperty { get; private set; }
            /// <summary>
            /// 错误信息
            /// </summary>
            public string ErrMessage { get; private set; }
            public RuleViolation(string errProperty, string errMessage)
            {
                this.ErrProperty = errProperty;
                this.ErrMessage = errMessage;
            }
            public RuleViolation(string errMessage)
                : this(errMessage, null)
            {
     
            }
        }
        /// <summary>
        /// 实体验证统一接口
        /// </summary>
        public interface IEntity
        {
            /// <summary>
            /// 验证是否通过
            /// </summary>
            bool IsValid { get; }
            /// <summary>
            /// 以迭代的形式返回验证列表
            /// </summary>
            /// <returns></returns>
            IEnumerable<RuleViolation> GetRuleViolations();
        }
         /// <summary>
        /// 用户实体验证
        /// </summary>
        public partial class UserBase : IEntity
        {
     
            #region IEntity Members
     
            public bool IsValid
            {
                get { return this.GetRuleViolations().Count() == 0; }
            }
     
            public IEnumerable<RuleViolation> GetRuleViolations()
            {
                if (string.IsNullOrEmpty(this.UserName))
                    yield return new RuleViolation("UserName", "用户名为能为空");
                if (this.Age == 0)
                    yield return new RuleViolation("Age", "没有年龄为0的数据,至少为1");
            }
     
            #endregion
        }
         /// <summary>
        /// 表字段列举
        /// </summary>
        [Flags]
        public enum UserBaseColumns
        {
            UserName = 1,
            Age = 2,
        }
  • 相关阅读:
    mybatis动态查询,模糊查询
    Python 列表
    异步加载实现点赞功能($.load 出现post不支持)
    shiro多账号登录(用户名,手机号,邮箱)
    spring data jpa 级联操作的时候注意事项
    semantic UI 点击按钮自动提交表单原因
    上线日期
    有关弱类型意识、DOM、动态语言与函数式编程
    视频项目时长的存储和程序设计方案---单例模式节省内存空间以及自定义注解
    项目中整合第三方插件与SpringMVC数据格式化关于ip地址
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/5509346.html
Copyright © 2011-2022 走看看