Senior
Forneça exemplos de violações dos princípios 'SOLID' nas bibliotecas padrão.
sobes.tech IA
Resposta da IA
Os princípios SOLID na maioria das bibliotecas padrão da Apple são seguidos a um alto nível. No entanto, podem ser encontrados exemplos onde sua aplicação não é tão rigorosa ou possui exceções:
- Princípio da responsabilidade única (SRP): Algumas classes em UIKit ou Foundation realizam várias tarefas não relacionadas. Por exemplo,
UIViewControllerpode ser responsável não apenas por gerenciar as visualizações, mas também pelo processamento de dados, navegação, etc. - Princípio de aberto/fechado (OCP): Expandir a funcionalidade de algumas classes padrão às vezes requer modificar a própria classe, em vez de criar uma subclasse ou usar um protocolo. Um exemplo pode ser adicionar nova funcionalidade ao
UITableViewDataSourceexistente sem poder substituir facilmente parte de seu comportamento. - Princípio de substituição de Liskov (LSP): Em algumas hierarquias de classes, por exemplo, no tratamento de gestos (
UIGestureRecognizere suas subclasses), nem sempre é possível substituir a classe base por sua subclasse sem alterar o comportamento do aplicativo. - Princípio de segregação de interfaces (ISP): Alguns protocolos nas bibliotecas padrão podem conter muitos métodos, nem todos necessários para todas as classes que os implementam. Um exemplo pode ser o protocolo
UITableViewDelegate, que possui muitos métodos opcionais. - Princípio de inversão de dependências (DIP): Embora a injeção de dependências seja amplamente utilizada no desenvolvimento moderno para iOS, em algumas partes antigas dos frameworks, as dependências podem estar fortemente acopladas, dificultando testes e substituição de componentes.
É importante notar que essas "violação" muitas vezes representam compromissos, condicionados pela história do desenvolvimento, desempenho ou para simplificar o uso da API em cenários típicos. Na maioria dos casos, um projeto inteligente de aplicativos sobre as bibliotecas padrão permite seguir os princípios SOLID.