Clean Architecture

Clean Architecture organizes code into concentric policy levels. Dependencies point toward entities and use cases; frameworks and delivery mechanisms remain replaceable details.

src/app/
├── entities/
├── use_cases/
├── interface_adapters/
└── frameworks/

Complete Configuration

deply:
  paths: ["."]
  exclude_files:
    - '.*/\.venv/.*'
    - '.*/tests?/.*'
  layers:
    - name: entities
      collectors:
        - type: directory
          directories: ["src/app/entities"]
    - name: use_cases
      collectors:
        - type: directory
          directories: ["src/app/use_cases"]
    - name: interface_adapters
      collectors:
        - type: directory
          directories: ["src/app/interface_adapters"]
    - name: frameworks
      collectors:
        - type: directory
          directories: ["src/app/frameworks"]
  ruleset:
    entities:
      disallow_layer_dependencies: [use_cases, interface_adapters, frameworks]
      disallow_external_imports: [django, fastapi, flask, sqlalchemy, requests, httpx]
    use_cases:
      disallow_layer_dependencies: [interface_adapters, frameworks]
    interface_adapters:
      disallow_layer_dependencies: [frameworks]

Use the project’s real vocabulary instead of renaming packages only to match the diagram. Clean, Onion, and Hexagonal architectures share inward dependency rules; choose one vocabulary and apply it consistently.

Deply can enforce the dependency rule, but it cannot verify runtime dependency injection or whether abstractions represent useful application boundaries.

Validate

deply validate --config=deply.yaml
deply analyze --parallel --config=deply.yaml

Reference: Robert C. Martin’s Clean Architecture.


This site uses Just the Docs, a documentation theme for Jekyll.