O que são os princípios SOLID?
Resposta Completa
SOLID é um acrônimo para cinco princípios de design orientado a objetos que tornam o software mais fácil de entender, modificar e estender.
S — Single Responsibility Principle (Princípio da Responsabilidade Única) Uma classe deve ter um, e apenas um, motivo para mudar. Na prática: se você descreve uma classe com "e", ela provavelmente tem responsabilidades demais.
// Ruim: uma classe faz parsing E persistência
class UserService {
parseCSV(data: string) { ... }
saveToDatabase(user: User) { ... }
}
// Bom: responsabilidades separadas
class UserParser { parseCSV(data: string) { ... } }
class UserRepository { save(user: User) { ... } }
O — Open/Closed Principle (Princípio Aberto/Fechado) Entidades de software devem ser abertas para extensão, mas fechadas para modificação. Adicione comportamento novo criando código novo, não alterando o existente.
L — Liskov Substitution Principle (Princípio da Substituição de Liskov)
Subtipos devem ser substituíveis pelos seus tipos base sem quebrar o comportamento. Se Quadrado extends Retangulo mas sobrescrever setWidth também muda a altura, viola o LSP — código que espera um Retangulo vai quebrar.
I — Interface Segregation Principle (Princípio da Segregação de Interface) Nenhum cliente deve ser forçado a depender de métodos que não usa. Prefira interfaces pequenas e focadas a interfaces grandes e genéricas.
// Ruim: uma interface grande
interface Trabalhador { trabalhar(): void; comer(): void; dormir(): void }
// Bom: dividida por papel
interface Trabalhavel { trabalhar(): void }
interface Descansavel { comer(): void; dormir(): void }
D — Dependency Inversion Principle (Princípio da Inversão de Dependência) Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações. Na prática: dependa de interfaces, injete implementações.
// Ruim: alto nível depende diretamente do baixo nível
class OrderService {
private db = new PostgresDatabase()
}
// Bom: depende de abstração, implementação injetada
class OrderService {
constructor(private db: Database) {}
}Resposta Rápida para o Entrevistador
SOLID: Single Responsibility (um motivo para mudar), Open/Closed (estender sem modificar), Liskov Substitution (subtipos substituem o tipo base), Interface Segregation (interfaces pequenas e focadas), Dependency Inversion (dependa de abstrações, injete implementações).
Flashcard