Em qual DAO colocar minha SQL?
4 minutos de leitura

Separação de responsabilidades é fundamental em qualquer sistema orientado a objetos. Afinal, a vida já nos ensinou que aquele código ASP que escreve HTML, contém regras de negócio, faz pipoca e acessa banco de dados é impossível de ser mantido a longo prazo. E uma das boas práticas em separar responsabilidades (e que os desenvolvedores já fazem bem há bastante tempo) é isolar acesso a banco de dados do resto do código. Sempre colocamos nossas consultas SQLs em nossos DAOs.
O problema é quando nosso sistema cresce, e passa a ter muitos DAOs e SQLs. A pergunta que vem a cabeça é: onde colocar essa SQL? Veja, por exemplo, a SQL abaixo. Em qual DAO ela pertence? Pertence a Projects, Commits ou Artifacts?
SELECT p.name as projectName, c.id as commitId, a.name as artifactName, a.path as artifactPath FROM Projects p JOIN Commits c on c.project\_id = p.id JOIN Artifacts a on a.commit\_id = c.id WHERE p.repository = 'Apache';
Não é uma decisão fácil. O desenvolvedor precisa conhecer bem o contexto do domínio para tomar essa decisão. No exemplo acima, talvez o melhor lugar para essa SQL seria o , afinal essa busca devolve uma lista de artefatos. E se por acaso ele tomar uma má decisão e colocar esse método em um DAO que não é o melhor? Outro desenvolvedor, ao procurar pela SQL, não a encontrará, e provavelmente escreverá uma réplica dela em outro lugar. E código repetido é sempre problema.
Autor(a)
maniche
Inscreva-se em nossa Newsletter
Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.



