event-sourcing-cqrs的model有哪些
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍"event-sourcing-cqrs的model有哪些",在日常操作中,相信很多人在event-sourcing-cqrs的model有哪些问题上存在疑惑,小编查阅了各式资料,整理
千家信息网最后更新 2025年01月19日event-sourcing-cqrs的model有哪些
这篇文章主要介绍"event-sourcing-cqrs的model有哪些",在日常操作中,相信很多人在event-sourcing-cqrs的model有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"event-sourcing-cqrs的model有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
Event
public abstract class Event { private final UUID aggregateId; private final ZonedDateTime timestamp; private final int version; protected Event(UUID aggregateId, ZonedDateTime timestamp, int version) { this.aggregateId = checkNotNull(aggregateId); this.timestamp = checkNotNull(timestamp); this.version = version; } public UUID getAggregateId() { return aggregateId; } public ZonedDateTime getTimestamp() { return this.timestamp; } public int getVersion() { return version; }}
Event定义了aggregateId、timestamp、version属性
EventStore
public interface EventStore { void store(UUID aggregateId, ListnewEvents, int baseVersion) throws OptimisticLockingException; List load(UUID aggregateId);}
EventStore接口定义了store、load方法
Aggregate
public abstract class Aggregate { private UUID id; private int baseVersion; private ListnewEvents; protected Aggregate(UUID id) { this(id, emptyList()); } protected Aggregate(UUID id, List eventStream) { checkNotNull(id); checkNotNull(eventStream); this.id = id; eventStream.forEach(e -> { apply(e); this.baseVersion = e.getVersion(); }); this.newEvents = new ArrayList<>(); } protected void applyNewEvent(Event event) { checkArgument(event.getVersion() == getNextVersion(), "New event version '%s' does not match expected next version '%s'", event.getVersion(), getNextVersion()); apply(event); newEvents.add(event); } private void apply(Event event) { try { Method method = this.getClass().getDeclaredMethod("apply", event.getClass()); method.setAccessible(true); method.invoke(this, event); } catch (InvocationTargetException e) { Throwables.propagate(e.getCause()); } catch (NoSuchMethodException | IllegalAccessException e) { throw new UnsupportedOperationException( format("Aggregate '%s' doesn't apply event type '%s'", this.getClass(), event.getClass()), e); } } public UUID getId() { return id; } public int getBaseVersion() { return baseVersion; } public List getNewEvents() { return ImmutableList.copyOf(newEvents); } protected int getNextVersion() { return baseVersion + newEvents.size() + 1; }}
Aggregate定义了id、baseVersion、newEvents属性;其applyNewEvent方法会执行apply(event)及newEvents.add(event);apply方法通过反射执行event的apply方法
ValueObject
public abstract class ValueObject { @Override public boolean equals(Object o) { return EqualsBuilder.reflectionEquals(this, o); } @Override public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); } @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); }}
ValueObject覆盖了equals、hashCode、toString方法
Specification
public interface Specification{ boolean isSatisfiedBy(T value);}
Specification接口定义了isSatisfiedBy方法
到此,关于"event-sourcing-cqrs的model有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
方法
学习
属性
接口
更多
帮助
实用
接下来
文章
理论
知识
篇文章
网站
资料
跟着
问题
好用
反射
实践
解答
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
qt数据库获取最大id
数据库通常指的是什么原因
数据库汇总怎么用
江苏手机软件开发价格
网络技术企业所得税
数据库管理系统体系结构
教育局网络安全攻击演练
北理工 网络技术研究
达内文档开发服务器
亚马逊服务器连接无法上网
成都软件开发驻场
软件开发内保
淘宝云服务器
数据代码软件开发学校
网络安全经费预算规定
网络安全师证件
网络安全工程师工作经历
上海市第一届网络安全小主播
软件开发集市
软件开发的延伸行业
单位系统软件开发公司
反代理服务器配置
网络安全技术支持是什么意思
erp软件开发需要多久
服务器管理面板有用吗
数据库工作总结
服务器游戏不能安装怎么办
网络安全模式下做系统
台湾服务器游戏加速云主机
pup软件开发视频