说说底层架构之实体类的设计
今天有点时间,来说说如何设计的实体类更加合理,灵活,规范.
首先,那要和真实数据表一一对应,必要的话,可以对类型抽象化,可以引入枚举,泛型列表等类型;其次,对实体要集成它的数据有效性的验证功能;再次,为了数据操作方便,有必要去引入数据表字段的列举集合;综上所述,我们来设计一个用户表实体;
本例中的知识点为:部分类,接口规范,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,
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示