开源数据版本管理组件 -- VersionRepository
在开发中经常会遇到管理数据变化的需求。例如:绩效系统需要根据季度开始时某人的上级领导来确定由谁来打绩效分,游戏系统根据活动结束时间的积分发放奖励…… 如果数据库中只存了最新的状态,就无法实现这样的功能了。
这时就需要我们制作一套“事件溯源”系统。当然,我们这次实现的“事件溯源”并不是真正DDD上的“事件溯源”,真正的事件溯源是以领域事件作为驱动实现的。我们的这个系统,叫“数据版本管理组件”更合适。现在我们就利用开源组件 VersionRepository 来实现这个功能。
VersionRepository 是一个以Mongodb 作为存储实现的数据版本管理组件,数据的比较、快照的生成对使用者都是透明的,使用起来比较简单。
准备工作:
一,安装一个 mongodb ,推荐使用 docker 方式,一个命令即可:docker run -p 27017:27017 -d mongo:3.2
二,建立一个 NetCore 2.2 的控制台项目,并安装 xLiAd.MongoEx.VersionRepository。
开始编码:
二,建立一个实体类,并继承 VersionEntityModel 。
public class UserModel : VersionEntityModel{[Key]public string EmployeeCode { get; set; }public string CName { get; set; }public string Mail { get; set; }public DateTime? BirthDay { get; set; }public int Class { get; set; }}
其中 Key 标记模型的实际意义上的主键(不可重复),如果没有,可不标。
三,编写如下代码在 Main 方法里
MongoUrl mongoUrl => new MongoUrl("mongodb://你的Mongo连接串");VersionMongoRepository<UserModel> userRepository => new VersionMongoRepository<UserModel>(mongoUrl);var model = new UserModel(){CName = "Jim Green",EmployeeCode = "12345",Mail = "jim@sina.com"};userRepository.AddOrEdit(model, new DateTime(2019, 8, 20, 15, 30, 20));model.Mail = "john@sina.com";model.CName = "John Smith";userRepository.AddOrEdit(model, new DateTime(2019, 9, 20, 15, 30, 20));var m0 = userRepository.GetModel("12345", new DateTime(2019, 8, 20));var m1 = userRepository.GetModel("12345", new DateTime(2019, 8, 21));var m2 = userRepository.GetModel("12345", new DateTime(2019, 9, 20));var m3 = userRepository.GetModel("12345", new DateTime(2019, 9, 21));var m4 = userRepository.GetModel("12345", DateTime.Now);
四,确认从m0 到 m4 是不是符合当时的状态。
m0 应该是 null ,因为实体在当时还没有建立;
m1 是 Jim Green ,因为实体已经第一次建立了。
m2 应该和 m1 是一样的,因为GetModel的时候在更新之前。
m3 应该是 John Smith ,因为已经修改了。
m4 应该和 m3 是一样的,除非你穿越了。
五,VersionMongoRepository 里提供了基本的增删改查功能,还可根据快照时间进行检索、分页。
如果你也有同样的需求,可以按照上述方法试一试;如果你想更多了解一下,可以到github 下载源码:https://github.com/zl33842901/MongoEx
开源数据版本管理组件 -- VersionRepository相关推荐
- 阿里开源数据同步组件Canal
一.简介 canal是阿里开源的数据同步组件 这个是是git地址 二.使用步骤 1.安装配置mysql 安装一个数据库(这个数据库是被监听的对象,我这里用的是mysql5.7) 创建一个用户专门用于数 ...
- 开源数据访问组件Smark.Data 1.7新增功能
借助于扩展方法的功能,这一版本的改进可以让数据库操作变得更简单方便,在数据库操作相关会给你一种全新的体验.主要改进有以下几点: 条件表达式可以直接和string进行组合,从而更灵活地创建复杂的查询条件 ...
- 开源数据访问组件Smark.Data 1.8入门编
本章节主要讲述如何使用Smark.Data 1.8进行快速的数据库应用开发,主要内容包括配置,执行SQL和存储过程等基础的数据操作. 配置 在组件使用之前必须进行一个初始化配置,主要配置数据访问设备和 ...
- 开源数据访问组件Smark.Data 1.8
Smark.Data一直强调以最简单和高效的方式访问数据库,在这个版本中组件引入了Query<T>对象,它是一个查询值描述对象,通过它可以更方便地进行数据查询并获取结果.组件会分析T的具体 ...
- 开源的关系型数据持久化组件
Apache Empire-db 是一个开源的关系型数据持久化组件,能够实现数据库无关的动态查询定义,简便的数据读取和更新.与其它持久化组件相比 如:Hibernate.TopLink.iBATIS或 ...
- 测试 ClownFish、CYQ、Entity Framework、Moon、MySoft、NHibernate、PDF、XCode数据访问组件性能...
下期预告: 由于很多园友反馈,有的组件不应该缺席.测试复杂度不够.测试还缺乏一定的公平. 因此考虑在下一个版本中,确保在更加公平的前提下进行更高复杂度的测试 . 同时将分为2组测试,纯SQL组件及纯O ...
- 开源Vue表格组件,表格插件源码
开源Vue表格组件,表格插件源码 前言: 关于html里面原生的table,通常满足不了程序员的要求.所以开发了一款表格插件,其功 能有: 1 导入json格式数据后,自动填充表格.表格长宽自适应.排 ...
- 重磅!GitHub 开源负载均衡组件 GLB Director
8 日,GitHub 发布了开源负载均衡组件 GitHub Load Balancer Director(GLB) Director,GLB 是 GitHub 针对裸机数据中心的可扩展负载均衡解决方案 ...
- spark 动态预加载数据_热门大数据引擎/组件概要
热门大数据引擎/组件概要 TeraData 老牌数仓公司,已经上市十几年,数仓领导者地位(from Gartner),目前在向云端发力.主要提供一体机,MPP架构,运行稳定,之前工行用的是TD的系统, ...
最新文章
- python3网上学习资源汇总
- 无线对讲调度服务器,无线对讲系统解决方案
- 2014年中国新闻业年度观察报告
- 对DataTable的一些解释
- colorpix取色小工具_五款互联网人必备的免费工具,超级实用
- 内存分配失败错误处理
- 图像的频谱图简单理解
- linux 7查看网络流量,CentOS7 监控网络流量
- Kali 里边没有声声音 解决办法 有帮助的话给兄弟点个赞 感激不尽
- 罗格斯大学本科计算机科学,罗格斯大学计算机科学
- 调用泛微OA接口的一些基本常识
- 热修复——Tinker的集成与使用
- 蓝桥杯:魔方旋转问题【高职组】
- pytorch 模型中的bn层一键转化为同步bn(syncbn)
- 大话 MySQL 数据库 -- 强推收藏!
- 199美元的iPhone和磨刀霍霍的程序员
- 如何将NOAA官网下载的气象雷达原始数据转化为NC文件
- 基于ABC人工蜂群优化算法的最优解搜索算法matlab仿真
- 《Energy and Buildings》期刊介绍(SCI 2区)
- 补充 sealtalk 群组分析