Why this matters
Improves testability, reuse, and separation of concerns.
Keep UI/controllers thin; move domain logic to services or domain objects.
Improves testability, reuse, and separation of concerns.
Side-by-side examples engineers can pattern-match during review.
public IActionResult Post(){ /* validate, compute totals, call db, send email */ }public IActionResult Post(){ var result = _orderService.Create(request); return Ok(result); }Controller does all domain workController delegates to serviceFrom the same buckets as this rule.
For changes that affect architecture, data models, external APIs, security posture, deployment topology, or cost (>10%), create an ADR in docs/adr/ using the standard template (Context, Decision, Consequences) and link the PR and issue IDs.