03 · Buenas Prácticas
1. Principio de Hollywood
// src/domain/ports/ClockPort.ts
export interface ClockPort {
now(): Date;
}
// src/infrastructure/clock/SystemClock.ts
import { ClockPort } from "../../domain/ports/ClockPort";
export class SystemClock implements ClockPort {
now() {
return new Date();
}
}// src/application/use-cases/GenerateInvoiceUseCase.ts
import { ClockPort } from "../../domain/ports/ClockPort";
export class GenerateInvoiceUseCase {
constructor(private readonly clock: ClockPort) {}
execute() {
const issuedAt = this.clock.now();
return { invoiceId: "INV-" + Date.now(), issuedAt };
}
}2. Constructor vs. Setter injection
Estilo
Pros
Contras
3. Service Locator ≠ Dependency Injection
4. Null Object & Optional Ports
5. Módulos barril (index.ts) solo en Infraestructura
index.ts) solo en InfraestructuraÚltima actualización