事件溯源-《复杂软件设计之道:领域驱动设计全面解析与实战》笔记 - 6
1. 关于事件溯源MartinFowler在2005年的博客中提及了“EventSourcing”这个词语,他将事件描述为一个应用的一系列状态改变,这一系列事件能够捕获用来重建当前状态的一切事实真相。他认为事件是不可变的,事件日志是一种只会不断追加(appendonly)的存储。事件从来不会被删除,
1. 关于事件溯源MartinFowler在2005年的博客中提及了“EventSourcing”这个词语,他将事件描述为一个应用的一系列状态改变,这一系列事件能够捕获用来重建当前状态的一切事实真相。他认为事件是不可变的,事件日志是一种只会不断追加(appendonly)的存储。事件从来不会被删除,
1. DDD的实现架构DDD的实现架构有很多种,这些架构都是一种关注点分离模式的实现,也是SOLID单一职责原则的体现,将人们关注的一个职责与其他职责分离,不要试图混合在一起。传统的SOA架构在这方面有很大缺陷,造成了一种单体耦合的架构,虽然这样的大型服务能够实现一定程度的复用和重用,但是在重用和解
1. 充血/贫血模型1.1. 理解充血模型与贫血模型DDD领域模型=数据结构+操作方法,数据和行为结合在一起才是一个完整的真正业务对象(领域对象),也才能够真正发挥对象封装的作用,这样的对象或类称为“充血模型”。贫血模型的对象或类一般只有setter/getter方法,是一种纯粹的数据结构,没有任何
1. Top Level聚合设计是DDD战术设计中的一部分。通过有界上下文划分团队,使用统一语言命名上下文;聚合设计则是进入有界上下文内部讨论其结构。如果说有界上下文解决了领域内的划分,那么聚合就解决了有界上下文内对象之间的划分。所谓划分就是将紧密的放一起,让松散的更加松散,甚至没有关系。从这里能看
1. Top Level领域驱动设计共有两个部分:战略设计战术设计战略设计也可理解为策略设计,是从宏观角度着眼于领域的分析设计,属于系统分析阶段,注重如何从有界上下文中寻找领域模型,战略模式由有界上下文、无所不在的语言和上下文映射组成战术设计属于设计代码阶段,使用聚合、实体、值对象等对象类型概念表达
1. 传统建模与DDD建模1.1. E-R数据建模&面向对象建模E-R数据建模ER数据建模法是在接收到需求以后直接开始数据表ER模型的设计、实体表和表关系的设计。ER模型往往依赖于数据库技术,甚至与后者非常紧密地耦合在一起,虽然带来了效率的提升,但是高效率不代表高质量,而软件高质量却能带来高
1. 第一本福克纳接触到福克纳其实是豆瓣有一期纪念福克纳的活动,我点进去后发现有本叫做《喧哗与骚动》的书,我很喜欢这个书名,又因为这是49年诺奖作品,有了读这本书的计划。《喧哗与骚动》是我的第一本福克纳,工作之余大概花了一个月时间才看完,倒不是篇幅很长,而是福克纳的“意识流”的写作法让我一开始表现出
Java线程与协程1. 线程的实现方式1.1. 内核线程实现使用内核线程实现的方式也被称为1:1实现。内核线程(Kernel-Level Thread,KLT)就是直接由操作系统内核(Kernel,下称内核)支持的线程,这种线程由内核来完成线程切换,内核通过操纵调度器(Scheduler)对线程进行
1. 编译器分类前端编译器:.java文件转变为.class文件的过程(比如Javac)后端编译器:即时编译器(JIT编译器,Just In Time Compiler):运行期把字节码转变成本地机器码的过程(比如HotSpot的C1、C2编译器,Graal编译器)提前编译器:把程序编译成与目标机器
1. 运行时栈帧结构Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧包括了局部变量表、操作数栈、动态连接、方法返回地址和
1. 类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading