• 说说底层架构之实体类的设计


     

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

    本例中的知识点为:部分类,接口规范,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,
        }
  • 相关阅读:
    AJAX
    前端上传文件 后端PHP获取文件
    PHP基础语法
    JS错误记录
    JS学习笔记
    python利用xlrd读取excel文件始终报错原因
    安装xlwt和xlrd
    编程菜鸟的日记-Linux无处不在
    编程菜鸟的日记-《软件测试》Ron Patton著-读书笔记
    编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习9
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/5509346.html
Copyright © 2020-2023  润新知