# mattia-battiston/clean-architecture-example

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/mattia-battiston-clean-architecture-example).**

1,776 stars · 400 forks · Java

## Links

- GitHub: https://github.com/mattia-battiston/clean-architecture-example
- awesome-repositories: https://awesome-repositories.com/repository/mattia-battiston-clean-architecture-example.md

## Description

This project is a reference implementation for structuring Java applications using clean architecture and domain-driven design principles. It provides a template for organizing code into concentric layers, ensuring that core business rules and domain entities remain entirely independent of external frameworks, databases, and delivery mechanisms.

The architecture relies on the dependency inversion principle to decouple business logic from infrastructure. By defining abstract interfaces for data access and external services, the system allows for the replacement of underlying technologies without requiring modifications to the core application logic. A dedicated configuration layer manages dependency injection, isolating framework-specific wiring from the domain code.

The codebase supports a comprehensive testing strategy that validates system behavior across multiple levels, including isolated unit logic, business-focused acceptance scenarios, and end-to-end journeys. This modular approach facilitates long-term maintenance by ensuring that business actions remain encapsulated as independent, testable units.

## Tags

### Software Engineering & Architecture

- [Clean Architecture Frameworks](https://awesome-repositories.com/f/software-engineering-architecture/clean-architecture-frameworks.md) — Structures Java applications to keep core business rules independent of frameworks, databases, and external delivery mechanisms.
- [Clean Architecture Implementations](https://awesome-repositories.com/f/software-engineering-architecture/java-application-architecture/clean-architecture-implementations.md) — Provides a reference implementation of clean architecture principles to decouple business logic from external frameworks and infrastructure.
- [Dependency Inversion Patterns](https://awesome-repositories.com/f/software-engineering-architecture/project-management-governance/dependency-boundary-enforcers/dependency-inversion-patterns.md) — Ensures high-level business logic depends on abstractions rather than concrete infrastructure implementations to maintain loose coupling.
- [Domain-Driven Designs](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture/architectural-patterns/abstraction-domain-modeling/domain-driven-designs.md) — Encapsulates complex business logic and data entities into isolated objects free from infrastructure dependencies.
- [Layered Architectures](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture/architectural-patterns/layering-presentation/layered-architectures.md) — Organizes application code into concentric functional layers to isolate business logic from infrastructure and delivery concerns.
- [Decoupled Logic Layers](https://awesome-repositories.com/f/software-engineering-architecture/decoupled-logic-layers.md) — Separates user interfaces and data access layers from core application logic to allow for flexible technology upgrades.
- [Explicit Dependency-Injection Wiring](https://awesome-repositories.com/f/software-engineering-architecture/integration-extensibility/dependency-injection/automated-dependency-wiring/explicit-dependency-injection-wiring.md) — Implements explicit dependency injection wiring to decouple business logic from framework-specific infrastructure.
- [Business Entities](https://awesome-repositories.com/f/software-engineering-architecture/integration-extensibility/extensibility/plugin-architectures/domain-specific/business-entities.md) — Encapsulates core business data and rules within independent objects free from infrastructure or framework requirements. ([source](https://github.com/mattia-battiston/clean-architecture-example/blob/master/README.md))
- [Logic Decoupling](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture/architectural-patterns/modular-decoupled-design/structural-design-paradigms/decoupled-logic-encapsulation/logic-decoupling.md) — Separates user interaction points and background tasks from core business logic to ensure accessibility through any communication channel. ([source](https://github.com/mattia-battiston/clean-architecture-example#readme))
- [Testability Optimizations](https://awesome-repositories.com/f/software-engineering-architecture/testability-optimizations.md) — Designs application components with clear interfaces to enable comprehensive testing without requiring external system environments.
- [Use Case Driven Architectures](https://awesome-repositories.com/f/software-engineering-architecture/use-case-orchestrators/use-case-driven-architectures.md) — Implements discrete business actions as independent units that define their own data requirements to ensure isolation from delivery mechanisms.

### Data & Databases

- [Data Abstraction Layers](https://awesome-repositories.com/f/data-databases/data-abstraction-layers.md) — Defines abstract interfaces for data operations to allow swapping storage technologies without modifying core business logic.
- [Data Access Abstractions](https://awesome-repositories.com/f/data-databases/data-engineering-infrastructure/data-persistence-storage/data-storage/data-access-abstractions.md) — Defines interfaces for data operations to allow swapping storage backends without affecting core application code. ([source](https://github.com/mattia-battiston/clean-architecture-example#readme))
- [Agnostic Models](https://awesome-repositories.com/f/data-databases/object-relational-mappers/domain-models/agnostic-models.md) — Implements core business entities as plain objects independent of external persistence frameworks or runtime environments.

### Testing & Quality Assurance

- [Business Logic Isolation](https://awesome-repositories.com/f/testing-quality-assurance/general-testing-utilities/test-isolation/logic-isolation-utilities/business-logic-isolation.md) — Executes discrete business actions as independent units that define their own data requirements through interfaces. ([source](https://github.com/mattia-battiston/clean-architecture-example/blob/master/README.md))
- [End-to-End Testing](https://awesome-repositories.com/f/testing-quality-assurance/software-testing/e2e-integration-testing/end-to-end-testing.md) — Validates system behavior through a tiered testing strategy covering unit logic, acceptance scenarios, and end-to-end journeys. ([source](https://github.com/mattia-battiston/clean-architecture-example/blob/master/README.md))
