Os padrões de desenvolvimento visam resolver problemas recorrentes na implementação de sistemas, com a definição de soluções padronizadas, amplamente testadas e com modelos bem-organizados, utilizando a notação UML. Supondo que os gastos com a manutenção de um determinado sistema estejam muito altos, devido à proliferação de instruções SQL ao longo de todo o código, e você tenha sido contratado para refatorá-lo, qual padrão deverá utilizar para a melhoria da estratégia de persistência e consequente redução do custo de manutenção?
Questão
Os padrões de desenvolvimento visam resolver problemas recorrentes na implementação de sistemas, com a definição de soluções padronizadas, amplamente testadas e com modelos bem-organizados, utilizando a notação UML. Supondo que os gastos com a manutenção de um determinado sistema estejam muito altos, devido à proliferação de instruções SQL ao longo de todo o código, e você tenha sido contratado para refatorá-lo, qual padrão deverá utilizar para a melhoria da estratégia de persistência e consequente redução do custo de manutenção?
Alternativas
A) Observer
B) Proxy
C) Data Access Object
D) Flyweight
E) Service Locator
Explicação
O problema descrito é a proliferação de instruções SQL espalhadas por todo o código, o que aumenta o acoplamento entre a lógica de negócio e a lógica de acesso a dados, elevando o custo de manutenção (qualquer mudança no banco/consulta exige alterar muitos pontos do sistema).
O padrão que visa centralizar e encapsular o acesso a dados, isolando o código SQL em uma camada específica e oferecendo uma interface bem definida para operações de persistência (CRUD, consultas etc.) é o Data Access Object (DAO).
Com DAO:
- As instruções SQL ficam concentradas em classes de acesso a dados;
- A aplicação passa a depender de métodos (ex.:
clienteDAO.buscarPorId(id)) em vez de SQL espalhado; - Mudanças na estratégia de persistência (troca de SGBD, ajuste de queries, uso de ORM) tendem a impactar menos o restante do código.
Analisando as demais alternativas:
- Observer: trata de notificação/assinatura de eventos, não de persistência.
- Proxy: controla acesso a um objeto (lazy loading, segurança), não resolve SQL espalhado como foco principal.
- Flyweight: otimiza uso de memória com compartilhamento de objetos, não persistência.
- Service Locator: localiza serviços/recursos (ex.: injeção/lookup), não organiza o SQL em uma camada própria.
Alternativa correta: (C).