oi galera,
li muita coisa esses dias valorizando Injeção de Dependencias e Domain Driven Design e, por outro lado, esculhambando uso de statics e Singletons
eu concordo com as vantagens de Injeção de Dependencias e DDD, porém estou desenvolvendo uma aplicação Desktop para a loja de um amigo meu e e escolhi o Java por ser a linguagem com a qual tenho mais intimidade… já até fiz algumas “consultorias” aqui (no guj… hehehe), mas dessa vez gostaria de perguntar algo diferente:
Como não quero usar containers (acho q a maquina de produção não é suficientemente poderosa para tal), fica impossibilitado o uso de Injeção de Dependencias, e portanto, estou usando o PersistenceUtil que utiliza uma ThreadLocal para me fornecer os EntityManager… isso é desaconselhável ? (pois pelo q entendi isso é um Singleton) ? Por que é desaconselhável? Eu li o post do blog da caelum: Singletons e static: perigo à vista mas como não posso usar injeção de dependencias, não vejo alternativas…
Outra coisa é que eu estava usando Dao para encapsular as consultas SQL… deixar todo o “lixo” do SQL dentro dos Dao e fazer meus Managers consultarem coisas do Banco de Dados com os Daos…
como não posso usar Injeção de Dependencia, eu estava pensando em usar metodos estáticos no Dao… e até acho que faz sentido ter uma classe como “Utilitária de Consulta ao Banco de Dados”… e por ser algo utilitário faz sentido ter métodos estáticos…
porém… com todas críticas a essas duas arquiteturas, eu queria saber então qual seria uma alternativa…
e mais importante ainda: pq essas arquiteturas são tão criticadas? (o post da Caelum ao meu ver não dá um motivo… o único citado é q não faz sentido… mas eu particularmente acho q faz sentido :D)
ps: se essa resposta for muito óbvia eu me contento com link para algum lugar q cite os problemas dessas arquiteturas…
eu pensei aki em criar uma classe ManagerGenerico que conteria o EntityManager… e assim os Managers extenderiam dele e teriam acesso ao EntityManager por herança… achei uma boa… o problema é como passar esse EntityManager aos Daos…
(e os EntityManager precisam ficar sob responsabilidade dos managers pois se não eu teria q criar uma transação por operação… e isso acho errado… até pq se eu estiver no meio de um metodo do manager… caso haja rollback… ele tem q voltar TUDO)…
um jeito de passar o EntityManager para os Daos seria por setters ou por contrutores… mas acho q ficar instanciando Daos e passando EntityManagers é muito feio… sou mais os metodos statics mesmo com o PersistenceUtil me fornecendo o EntityManager…
eu juro q ficaria satisfeito de encontrar uma solução q não fosse tão na contramão das criticas mais recentes… e por isso agradeço qualquer ajuda… até pq estou fazendo essa aplicação para aprender mais Java e portanto queria usar as coisas mais modernas 
abraços e agradeço qualquer ajuda…