← ClaudeAtlas

creating-domain-modellisted

Create, extend, or fix Eloquent business models and their state transitions. Use when moving business rules out of controllers or Actions, or explicitly migrating a model into a DDD capability.
maiobarbero/laravel-boost-ddd · ★ 1 · AI & Automation · score 72
Install: claude install-skill maiobarbero/laravel-boost-ddd
# Domain models New adopted models live in `App\Domain\<Capability>\Models`. Eloquent entities are the default; do not split persistence models from domain entities without a concrete need. Extending an existing legacy model does not authorize relocating it. Put behavior on the entity that owns its rules. Mutate state in the model; let the Action persist it: ```php public function cancel(): void { if ($this->status !== 'pending') { throw new OrderCannotBeCancelled(); } $this->status = 'cancelled'; } ``` Here `OrderCannotBeCancelled` belongs to `App\Domain\Orders\Exceptions`. Use the project's existing enum/cast when applicable. No `save()`, HTTP response, `abort()`, policy invocation, or Infrastructure call belongs in this method. An Action calling it must explicitly save. Domain may produce or record an event describing a transition; Application coordinates dispatch. Do not add an event collector or base aggregate solely for DDD. Models may collaborate across capabilities in the same bounded context. Eloquent remains usable; repositories are not required for normal queries or persistence. ## Preserve Laravel behavior When a model move is explicitly in scope: - Keep factories in `database/factories`. Map the model to its factory with `UseFactory` or `newFactory()` when required, and map the factory back using its `$model` property or the installed version's equivalent. - Keep policies in `app/Policies`; register them with `Gate::policy()` in a se