此项目理论基础源于Eric Evans
的《领域驱动设计》,Vaughn Vernon
的《实现领域驱动设计》 (IMPLEMENTING DOMAIN-DRIVEN
DESIGN)
,彭晨阳的《复杂软件设计之道:领域驱动设计全面解析与实战》。10几年前Eric Evans
给我们带来了领域驱动设计,其理论抽象
地描述了复杂软件解决之道,随后Vaughn Vernon
将理论同实际相结合,让我们看到了领域驱动设计的落地方案。如今彭晨阳前辈将其十几年领域驱动设计经验凝结于书中,全面分析了领域驱动
设计的发展、技术实现和实战。此刻我们站在巨人的肩膀上,前行...
引自领域驱动设计-前言
真实项目错综复杂,如何将领域驱动应用于实际?本项目或许能窥知一二。
- 领域、子域和限界上下文✔
- 上下文映射图✔
- 架构✔
- 实体✔
- 值对象✔
- 领域服务✔
- 领域事件✔
- 模块✔
- 聚合✔
- 工厂✔
- 资源库✔
- 集成限界上下文✔
- 应用程序✔
- 聚合与事件溯源(该部分会在Axon(DDD)框架分支详解 )✔
测试驱动开发是一种开发方式,要求先编写测试,然后实现。而不是先有实现,再有测试。真实环境下, 有时候先写测试是非常困难的,甚至是不可能的。我们可以选择前期先实现,中后期逐渐转换为测试驱动。 理想状态,我们所有的代码都是由测试驱动的,一些很薄的主要起着协调作用的层,如应用层,这些层的功能 主要是调用领域对象实现的功能。这时候对这些层做测试驱动显然费时费力且对质量保证作用甚微。因此,我们 主要对领域模型进行测试驱动。
测试驱动开发可参考:java测试驱动开发
Spock
是基于Groovy
语言的Java
测试框架,是Junit
的超集。简化了断言,添加了 函数名的自然语言
支持,同是也是行为驱动开发(BDD
)的工具。
详情可参考:Spock官网
也可参考我的翻译:点击直达
每个包都对应DDD的概念,如
valueobject
对应的是值对象,其package-info
便是值对象的概念详解:
此举意在将理论落实到实际,讨论清楚为什么会采用代码中的方法,对实际编码的 好处,及其其它可行的方法,而不是为DDD 而DDD。