You've already forked OrthoRoute
mirror of
https://github.com/bbenchoff/OrthoRoute.git
synced 2026-08-23 14:37:00 +00:00
1.3 KiB
1.3 KiB
applyTo
| applyTo |
|---|
| orthoroute/domain/** |
Domain Layer Rules
The domain/ layer is the innermost layer — it must have zero knowledge of infrastructure, frameworks, or KiCad.
Hard Rules
- No infrastructure imports. Never import from
orthoroute.infrastructure.*insidedomain/. - No application imports.
domain/cannot import fromorthoroute.application.*. - No KiCad bindings. No
pcbnew,kiutils, or any KiCad-specific type anywhere in this layer. - No I/O. No file reads, network calls, or subprocess usage.
Allowed Dependencies
# ✅ Standard library + pure third-party only
import dataclasses, typing, enum, math
import numpy as np # pure computation only
# ✅ Within domain
from orthoroute.domain.models.board import Board
from orthoroute.domain.services.routing_engine import RoutingEngine # abstract base
Patterns
- Models:
@dataclass(frozen=True)for value objects; one class per file. - Services: Abstract base classes (ABCs) only — concrete implementations live in
infrastructure/. - Events: Plain dataclasses, no event bus wiring (bus lives in
application/).
When you need external data
Define an interface in application/interfaces/ and inject it via the constructor. Never reach out directly.