v0.1.0
The first release: the DDD foundation on a Spring Boot 4.1 baseline.
Added
- Domain model primitives in
com.ddk.core.domain:Identifier,ValueObject,Entity,AggregateRoot,DomainEvent,DomainEventPublisher,Specification, with a framework-free domain package enforced by tests GenericRepositorybacked by MyBatis-Plus, with Entity ↔ PO mappers that fail at startup when missing or duplicated, and optimistic locking throughAggregateRoot.version()- Starters under a unified
ddk.*namespace: web, MyBatis, domain events, Redis, two-level cache, named data sources, tracing, Seata and ArchGuard ddk-cache-starter: Caffeine (L1) + Redis (L2) with cross-instance invalidation, Redis failure fallback, TTL jitter and Micrometer metricsddk-redis-starter: a JSONRedisTemplatewhose deserialization only accepts allow-listed packagesddk-archguard-starter: three- and four-layer ArchUnit rules, domain purity rules, andDDK_INTERNALS_MUST_NOT_BE_USED- Three- and four-layer Maven archetypes, and the runnable
ddk-example-userapplication scripts/ddk.shto install DDK locally and generate projects in one command- Null-safety: every package in
ddk-core,ddk-mybatisand the starters is@NullMarkedwith JSpecify, and NullAway checks it at compile time - Javadoc and sources jars for every module, built by the
releaseprofile in CI and attached to GitHub Releases;internalpackages are left out of the Javadoc - Quality gates in
mvn verify: Spotless checks and per-module JaCoCo minimums (70% lines, 50% branches); CI on Java 21 and 25
Changed
- Baseline is Spring Boot 4.1, Spring Framework 7 and Jackson 3
ddk-web-startercontributes Jackson defaults throughJsonMapperBuilderCustomizerand serializesLongas a stringddk-tracer-starterbuilds onspring-boot-starter-opentelemetryinstead of the whole actuatorEntity.id(),AggregateRoot.version()andApiResponsedata are declared@Nullable;AbstractException.getArgs()returns an empty array instead ofnull- The Redis level of the two-level cache writes synchronously, because Spring Data Redis 4 writes asynchronously by default and that let stale values flow back into L1
Removed
RedisUtil; injectRedisTemplate<String, Object>directly
Internal
Starter implementation classes live in com.ddk.<starter>.starter.internal packages and are not public API: CacheInvalidationListener, CacheInvalidationMessage, RedisCacheInvalidationPublisher, MicrometerCacheMetrics, JitteredTtlFunction, SpringDomainEventPublisher and TraceIdResponseFilter. Generated projects check this with DDK_INTERNALS_MUST_NOT_BE_USED.
- The springdoc dependency from
ddk-web-starter; add it in the application when API docs are needed