DDD Cómo lo he entendido y aplicado: Dominio Aquellas entidades del negocio que tienen alguna particularidad propia que merece ser declarada y encapsulada en una clase. Pueden no referirse a ninguna tabla. Actualmente lo tengo un poco mezclado el concepto, pues para evitar repetición utilice directamente la definición de los modelos Eloquent. Pendiente a futuro: Lo correcto sería separar los modelos puros y dejarlos únicamente en la capa Dominio sin necesidad de la declaración de modelos en Eloquent. La clave es que la entidad de dominio sea la única fuente de verdad de los campos. La entidad definiría los campos, cuales se persistirían, algo así: // Dominio class Movimiento { public const PERSISTIBLE = ['fecha_operacion', 'monto', 'tipo_operacion', /* ... */]; public $fecha_operacion; public $monto; // ... public function toArray(): array { $out = []; foreach (self::PERSISTIBLE as $key) { $out[$key] = $this->$key ?? null; } return $out; } public static function fromArray(array $data): self { $m = new self(); foreach (self::PERSISTIBLE as $key) { if (array_key_exists($key, $data)) { $m->$key = $data[$key]; } } return $m; } } Así dentro del modelo Eloquent, no escribimos los campos: class CuentaCorrienteModel extends Model { protected $table = 'yoga_cuentas_corrientes'; protected $guarded = []; // acepta todo lo que venga // no hace falta $fillable con cada campo } Los nombres de columnas siguen definidos en la entidad; Eloquent solo recibe el array y lo escribe en la tabla. Aplicación Refiere a la utilización de datos. La carpeta Data agrupa la recolección de datos utilizando los modelos Eloquent. La carpeta Logic agrupa procesos con los datos. La carpeta UseCases representan acciones o situaciones. Infraestructura, base de datos DB Model Eloquent Representan una tabla en la base de datos. Podría o no a su vez, ser un concepto del negocio. Los modelos en mi diseño, se enfocan en propiedades y metódos de 1 entidad, es decir que no tendrán querys de búsquedas en conjunto.