Skip to content

Latest commit

 

History

History
32 lines (20 loc) · 2.03 KB

File metadata and controls

32 lines (20 loc) · 2.03 KB

0001. Adopt Traditional Layered Architecture

Date: 2026-04-02

Status

Accepted (Under Reconsideration — see Issue #266)

Context

The project needed a structural pattern to organise the codebase for a REST API managing football player data. The primary goal is educational clarity — the project is a learning reference, so the pattern must be immediately understandable to developers familiar with standard layered architecture.

The two main candidates considered were traditional layered architecture (Controllers → Services → Repositories → Data) and Clean Architecture (with explicit domain, application, and infrastructure rings). Clean Architecture offers better separation of concerns and testability at the cost of significantly more boilerplate and conceptual overhead for a small PoC.

Decision

We will organise the codebase into four layers: HTTP (Controllers, Validators), Business (Services, Mappings), Data (Repositories, Data), and a cross-cutting Models layer. Each layer depends only on the layer below it; controllers must not access repositories directly, and business logic must not live in controllers.

Consequences

Positive

  • The pattern is widely understood and requires no prior knowledge of advanced architectural styles.
  • The folder structure maps directly to responsibilities, making the codebase easy to navigate.
  • Onboarding friction is low — contributors can locate any piece of logic by layer name alone.

Negative

  • Domain entities (Player) are shared across all layers, mixing persistence concerns with domain logic.
  • Dependencies flow in multiple directions at the model level, limiting flexibility.
  • Tight coupling between layers makes large-scale refactoring harder as the project grows.

Neutral

  • This decision is expected to be superseded when Issue #266 (Clean Architecture migration) is implemented. This ADR will remain in the repository as a record of the original decision and its context.