I — Interface Segregation Principle
“Es mejor tener muchas interfaces pequeñas y específicas que una gran interfaz general.”
No obligues a un componente a implementar métodos que no necesita.
interface IPlano { nombre: string; fechaCreacion: Date; pistas: Pista[]; pistaActiva: number; renderizarOndas(): void; exportarMP3(): void;}
// HeaderPlano necesita nombre y fecha, pero está forzado a implementar TODOinterface IDatosBasicosPlano { nombre: string; fechaCreacion: Date;}
interface IPista { pistas: Pista[]; pistaActiva: number;}
interface IRenderizable { renderizarOndas(): void; exportarMP3(): void;}
// HeaderPlano solo recibe lo que necesitaclass HeaderPlano { constructor(private datos: IDatosBasicosPlano) {}}