Service Layer
SkillDev toolsGuides your agent to write code with a clean service layer, placing business logic in framework-agnostic service classes.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Service Layer skill
About this capability
Defines application service structure and business orchestration boundaries
What this skill tells your AI
The instructions your AI receives, as published by bottelet/daybydaycrm in .claude/skills/service-layer/SKILL.md and read by ahel’s review.
Services are the only place business logic lives. They are framework-agnostic.
1. Responsibility
Services MUST:
- contain business logic
- coordinate models
- enforce domain rules
- return models or DTOs
Services MUST NOT:
- accept or return HTTP request/response objects
- contain UI logic
- use
app()orresolve()internally
2. Dependency Rule
Constructor injection only:
public function __construct(
private InvoiceRepository $repository
) {}
3. DTO Rule
DTOs are not required when the source is a validated FormRequest::validated()
array. Arrays are fine there.
Use DTOs when:
- crossing system boundaries (API, queues, external integrations)
- multiple services share a contract
- the payload must be stable across refactors
Skip DTOs when:
- input comes from a single controller action's validated request
- the data is short-lived and not reused
4. Standard Shape
app/Services/{Domain}/{Model}Service.php
e.g. app/Services/Task/TaskService.php, app/Services/Offer/OfferService.php.
Standard method names: create, update, delete, findByExternalId. Prefer
one service class per domain holding both create/update (see TaskService)
over splitting into separate per-action service classes.
Signals
- GitHub stars
- 2k
- Forks
- 767
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
service-layer- Source
- github.com/bottelet/daybydaycrm