clean-architecture-java
/clean-architecture-java
Use when laying out or extending a Java / Spring Boot service built with Maven — which module a class belongs in, which module may depend on which, and how an endpoint reaches a use case.
- Author
- sebastiendegodez ↗
- Repository
- skraft-plugin ↗
- Licence
- GPL-3.0
- Last repository change
- 11.10.2026
Assessment and security
- Files in this package
- 1
- Scripts
- 0
- HTML comments
- 0
- URLs in SKILL.md
- 0
No signals detected. Repository changed on 11.10.2026, without references to retired models or APIs.
GPL-3.0, otwarta.
What it does and when to use it
Use when laying out or extending a Java / Spring Boot service built with Maven — which module a class belongs in, which module may depend on which, and how an endpoint reaches a use case.
Original author description
Use when laying out or extending a Java / Spring Boot service built with Maven — which module a class belongs in, which module may depend on which, and how an endpoint reaches a use case.
How it works
- One Maven module per layer
- Use cases
- Domain
- Guard
SKILL.md preview
--- name: clean-architecture-java description: Use when laying out or extending a Java / Spring Boot service built with Maven — which module a class belongs in, which module may depend on which, and how an endpoint reaches a use case. --- # Clean Architecture — Java / Spring Boot The layer rules are those of `architecture-patterns`. This skill maps them onto Maven and Spring. ## One Maven module per layer | Module | Holds | Only `<dependency>` on | |---|---|---| | `<context>-domain` | aggregates, value objects, domain events | nothing | | `<context>-application` | use cases and the interfaces they call | `<context>-domain` | | `<context>-infrastructure` | implementations of those interfaces (JPA, HTTP clients, files) | `<context>-application` | | `<context>-api` | `@SpringBootApplication`, controllers, `@Configuration` wiring | `<context>-infrastructure` | - Import types reached transitively; never add a `<dependency>` to reach them. - Spring, Jakarta and JPA dependencies appear only in the `-infrastructure` and `-api` poms. - Tests live in the two test modules `clean-architecture-testing` defines, never in a layer module. ## Use cases - A use case is a `final` class named after the action (`BorrowBook`). The controller calls it directly: no interface in front of it, no `*Service` implementation. - A command method returns `void`; the caller creates the new id and passes it in. A query returns a `*ViewModel` record built in Application, never a domain object. - Application declares an interface only where it calls out (repository, gateway). A repository interface sits in Domain when it persists an aggregate, in Application otherwise. - Who may *read* a resource is checked in the use case. Who may *change* it is an aggregate rule: the mutation method takes the caller's id and throws. - Wire every class with `@Bean` methods in `-api`; Domain and Application classes carry no Spring annotation. - One transaction per use-case call, opened in `-api` (`TransactionTemplate` around the call, or `@Transactional` on the controller method). Never add an interface to a use case to decorate it. - Inside each module, one package per feature (`…application.loan`, `…infrastructure.loan`), never a technical one (`repository`, `service`, `persistence`). A use case imports no other feature's package; what two features use moves to a `shared` package of that module. - No `port`, `adapter`, `in` or `out` packages, and no "port" in type names or comments. ## Domain - An aggregate is created through a static factory over a `private` constructor, and identified by a typed id record (`OrderId`), never a raw `String` or `UUID`. ## Guard The module graph and the Spring-free core are enforced by the pom and ArchUnit tests of the `clean-architecture-testing` skill (its `references/examples-java.md`).
Versions
The database has no other skills named clean-architecture-java.
Database snapshot: 13.11.2026 · package version 029b8310628e (SHA-256 digest of the entire package)
Downloads in the last 30 days: 0 · ranking
Report a problem with this skill: harmful content, incorrect descriptions or an author’s removal request.
Similar skills
- 100clean-architecture-dotnet
Use when laying out or extending a .NET / ASP.NET Core solution — which project a class belongs in, which project may reference which, and how an endpoint reaches a use case. - 100clean-architecture-react
Use when laying out or extending a React / TypeScript front end — which folder a screen, component, hook, use case or API call belongs in, which folder may import which, and how a component reaches the API. Not for build, dependency, environment-variable or tooling configuration. - 100java-spring-patterns
Java 17+ and Spring Boot 3/4 architecture, idioms, transactions and testing. Use when building or reviewing Java or Spring Boot services. - 100java-package-structure
Use when creating or extending a Java or Spring Boot project, adding a new entity, endpoint, controller, service or repository, deciding which package a Java class belongs in, or when a controller and service end up in the same file. - 100300-frameworks-spring-boot-create-project
Use when you need to create a new Maven-based Spring Boot 4.0.x project using SDKMAN-managed Java and Spring Boot CLI tooling. This should trigger for requests such as Create a Spring Boot Maven project; Bootstrap Spring Boot project with SDKMAN; Generate a new Spring Boot… - 90spring-boot
Use when modifying a Java application that actually uses Spring Boot, Spring MVC, Spring Security, Spring Data, or Spring-managed configuration.