[NewLife.XCode]实体工厂(拦截处理实体操作)


NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。

整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。

开源地址:https://github.com/NewLifeX/X (求star, 795+)

如果说前面16篇讲的都是XCode的ORM功能,从这一篇开始,将超越ORM之外,从另一个角度讲解一个数据中间件!

实体接口

有心的同学可以发现,每一个实体类都有实现一个IEntity接口,这就是实体接口。

实体接口IEntity,抽象实体对象的添删改存操作,支持访问脏数据和扩展属性!

日复一日的写添删改查,上进的同学会想,能不能把许多类似的操作给封装为通用函数?

这是对IEntity接口的扩展方法,新增时设置CreateTime,每次设置UpdateTime,然后Save保存。

IEntity支持通过名称读写字段属性(《脏数据》中有提到实体属性赋值的三种方法),支持脏数据和添删改,可以无需反射而实现各种封装。

IEntity主要构成:

  • 添删改存。Insert/Update/Delete/Save/SaveAsync
  • 取值赋值。this[name]/SetItem/CloneEntity/CopyFrom
  • 脏数据。Dirtys/HasDirty/IsDirty(name)
  • 扩展属性。Extends

实体工厂

实体工厂接口IEntityOperate,抽象提供实体类的元数据、查询、事务、设置!

实体类的各种元数据一般可以通过内嵌静态类Meta访问,也可以通过实体工厂接口IEntityOperate访问,以便于设计各种灵活功能。 

实体工厂接口IEntityOperate主要构成:

  • 字段属性信息 Fields/AllFields/FieldNames。最常用,访问到所有数据属性的信息
  • 数据表 Table。提供实体类和数据表相关信息
  • 唯一主键 Unique。XCode强烈推荐使用唯一主键,因为许多特色功能要求有唯一主键才能支持
  • 实体会话 Session。提供数据库查询与执行的直接操作
  • 分表分库 TableName/ConnName。接口访问跟Meta.TableName/Meta.ConnName一样,可通过对其赋值改变当前线程下使用的表名和连接名,从而实现分表分库功能
  • 缓存 Cache/SingleCache/Count。实体缓存、对象缓存、总记录数
  • 查询数据 Find/FindByKey/FindAll/FindCount
  • 事务 BeginTransaction/Commit/Rollback

场景一:从Http请求中读取数据并填充到实体属性

场景二:多个实体类要做修改日志,重载Insert/Update/Delete后调用以下方法,把实体对象中被修改(IsDirty有脏数据)的字段和数值拼成字符串写入日志表

总结

XCode是一个开放性的数据中间件,为各公司团队打造自己的开发平台提供鼎力支持!

在这十多年的发展中,几乎所有使用XCode的公司团队,都根据团队情况和业务需要封装了自己的快速开发平台!

系列教程

NewLife.XCode教程系列[2019版]

  1. 。快速展现用法,代码配置连接字符串
  2. 。建立表格字段和索引,名字以及数据类型规范,推荐字段(时间,用户,IP)
  3. 。数据类业务类,泛型基类,接口
  4. 。连接字符串,调试开关,SQL日志,慢日志,参数化,执行超时。代码与配置文件设置,连接字符串局部设置
  5. 。自动建立数据库数据表
  6. 。InitData写入初始化数据
  7. 。重载拦截,自增字段,Valid验证,实体模型(时间,用户,IP)
  8. 。如何产生,怎么利用
  9. 。高并发统计
  10. 。单表和多表,不同连接,多种写法
  11. 。多表关联,Map映射
  12. 。复杂条件,分页,自定义扩展FieldItem,查总记录数,查汇总统计
  13. 。Sql缓存,更新机制
  14. 。全表整理缓存,更新机制
  15. 。字典缓存,适用用户等数据较多场景。
  16. 。字段精炼,索引完备,合理查询,充分利用缓存
  17. 。元数据,通用处理程序
  18. 。Membership
  19. 。Xml,Json,二进制,网络或文件
  20. 。常见拆分逻辑
  21. 。聚合统计,分组统计
  22. 。批量插入,批量Upsert,异步保存
  23. 。写入级缓存,提升性能。
  24. 。备份数据,恢复数据,同步数据
  25. 。提供RPC接口服务,远程执行查询,例如SQLite网络版
  26. 。ETL抽取,调度计算处理,结果持久化