j5ik2o/java-ddd-example
59.5
Adequate · 21 September 2026
377
lines of production code
Java
primary language
4
measurements over time
What this system is
This is a Java-based Domain-Driven Design example project that models bank account operations, including deposits, withdrawals, and transfers. It is structured as a multi-module Gradle project with separate layers for infrastructure, domain, and application logic. The system provides core financial domain models and utilities for generating unique identifiers.
Features
Added IdGenerator utility for generating unique identifiers
A new IdGenerator utility class has been added to the infrastructure layer. This component provides a static method, generateId(), which uses an AtomicLong counter to produce sequential, unique Long identifiers. This enables the application to generate simple, monotonically increasing IDs for entities or records.
infrastructure · high confidence
Added domain models for bank account operations
Introduced new domain classes to support bank account functionality. This includes the \BankAccount\ entity with methods for depositing, withdrawing, and transferring funds, along with a \BankAccountService\ to orchestrate transfers between accounts. A \Money\ value object handles currency amounts, and \BankAccountEvent\ tracks the history of changes. Additionally, a \stepbase\ package provides simpler data structures for the same concepts, accompanied by corresponding unit tests for both implementations.
domain · high confidence
Initial commit adds project documentation and build infrastructure
The repository is initialized with English and Japanese README files that explain the Domain-Driven Design example, including domain models like Money and BankAccount, and code examples. Additionally, Gradle wrapper scripts (gradlew, gradlew.bat) and a .gitignore file are added to support building the project and managing build artifacts.
(repo-wide) · high confidence
Behavioural changes
Added Gradle wrapper configuration
The project now includes a Gradle wrapper configuration file (gradle-wrapper.properties) that specifies the use of Gradle version 3.1. This ensures consistent build environments across different machines by providing the necessary wrapper scripts and properties to download and use the correct Gradle distribution.
gradle · medium confidence
Dependencies
Added Gradle build configuration for a multi-module Java project
Introduced a new Gradle build structure defining three modules: infrastructure, domain, and application. The build script configures Java 1.8 compatibility and declares dependencies on Lombok, Guava, and Apache Commons Lang, alongside JUnit for testing. The project is organized as a multi-module build where the application module depends on the domain module, which in turn depends on the infrastructure module.
(dependencies) · medium confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 54 → 59 (+5.6)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 99 → 100 (+0.2)
- Architecture 69 → 69 (+0.0)
- Maturity 85 → 85 (+0.0)
- Readiness 24 → 36 (+11.7)
- Security 100 → 100 (+0.0)
Resolved (8)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (6 lines × 2) (domain/src/main/java/com/github/j5ik2o/ddd_example/stepbase/BankAccountService.java)
- No exposed public API
- Test reliability not included
- The Domain Models section lists Money, BankAccount, and BankAccountService but does not link to the service implementation (BankAccountService.java) or describe how transfer events are persisted. (README.md)
- early-stage repository — too little history to judge knowledge freshness
- single-maintainer — knowledge-concentration (bus factor) risk
New (7)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Duplicated block (7 lines × 2) (domain/src/main/java/com/github/j5ik2o/ddd_example/stepbase/BankAccountService.java)
- No direct assertions: test (domain/src/test/java/com/github/j5ik2o/ddd_example/domain/BankAccountTest.java)
- No direct assertions: test (domain/src/test/java/com/github/j5ik2o/ddd_example/domain/MoneyTest.java)
- No direct assertions: test (domain/src/test/java/com/github/j5ik2o/ddd_example/stepbase/MoneyTest.java)
- No direct assertions: transfer1 (domain/src/test/java/com/github/j5ik2o/ddd_example/domain/BankAccountServiceTest.java)
- No direct assertions: transferTest1 (domain/src/test/java/com/github/j5ik2o/ddd_example/stepbase/BankAccountServiceTest.java)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
j5ik2o/java-ddd-example was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 9db38db663992e3e7771665c046c969e3e6d7bd6 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.