Traits y reutilización
- Cuando una lógica se reutiliza entre clases, colócala en un Trait
- Nada de lógica copiada/pegada, nada de duplicación entre componentes
- Un trait es para comportamiento que opera sobre
$this. Una función pura que solo transforma sus argumentos — da formato o normaliza un valor — debe ir en un helper, porque un trait la convertiría en un método de cada clase que lo use - Ubicación del trait según el tipo:
- Traits de Model →
app/Traits/(App\Traits) - Traits de Livewire →
app/Livewire/Traits/(App\Livewire\Traits)
- Traits de Model →
- Cuando un trait encapsula una funcionalidad, mantén esa funcionalidad autocontenida: propiedades, relaciones, scopes, métodos y cualquier registro de observer propio del trait mediante
bootTraitName(). Los observers específicos del model deben conservar solo el comportamiento exclusivo de ese model. - Nombra un trait de funcionalidad según la funcionalidad que encapsula —
HasReferralspara la funcionalidad de referidos — y úsalo en el model al que pertenece esa funcionalidad. - Extrae traits de funcionalidad solo para funcionalidades que un model tiene, pero no que es. No muevas los métodos de dominio propios de un model a un trait solo para cumplir con la cantidad.