Criei uma interface chamada HandleDB que contém métodos para manipulação no banco de dados (insert, remove, update, list).
Tenho 4 classes: (Todas implementam HandleDB)
-ModelAdmin
-VariableAdmin
-StationAdmin
-StateAdmin
Essa é a camada de negócio.
Minha dúvida é a seguinte:
Quero utilizar Business Delegate e Service Locator para me conectar a camada de negócio, mas eu tenho dúvida qt à implementação desses patterns.
Eu poderia fazer assim?
public class MeuBusinessDelegate {
public void insert(Object obj) {
MeuServiceLocator sl = new MeuServiceLocator();
sl.insert(Object obj);
}
public void remove(Object obj) {…}
public void update(Object obj) {…}
public List list(Object obj) {…}
}
public class MeuServiceLocator {
public void insert(Object obj){
HandleDB handleDB = null;
if(obj instanceof ModelBean) handleDB = new ModelAdmin();
if(obj instanceof VariableBean) handleDB = new VariableAdmin();
if(obj instanceof StationBean) handleDB = new StationAdmin();
if(obj instanceof StateBean) handleDB = new StateAdmin();
if(handleDB != null) handleDB.insert(obj);
}
.
.
.
}
Enfim, utilizo o Service Locator para ocultar os detalhes da implementação por trás do código de pesquisa de serviço de negócios.
É isso mesmo? Eu poderia fazer assim? Isso está certo?
vc ta decidindo qual objeto retornar no service locator.
acho que ta misturando as coisas.
p/ mim o service locator deve retornar um objeto, não precisa conhece-lo.
acho que vc poderia mudar esse trecho de codigo p/ uma factory.ela sim tomaria a decisão de qual objeto retornar.
acho que vc pode ter uma classe tipo service locator, que retornace um new instance de um object qualquer, e na classe que chma vc faz o cast p/ o sua classe.
e uma factory que buscasse o tipo de obj.
A respeito do synchonized é uma dúvida q eu tenho faz tempo.
Pode acontecer de, por ser um método estático, meu objeto ser trocado por uma outra thread executando ao mesmo tempo esse método?
Vamos supor q um usuário entrou no sistema junto com outro usuário. Os dois pedem uma requisição e ao mesmo tempo eles entram nesse método. Não pode acontecer de retornar um valor errado?
Pensei em colocar synchronized, para q esse método seja executado separadamente, sem inteferir com outras threads.
Basicamente o método vai executar várias vezes, mas cada vez é única e não interfere com as outras. O que você pode ter problema é se os métodos acessarem um recurso em comum, como um atributo (estático, no caso), aí eles pdoem alterar o valor ao mesmo tempo e essas coisas.
O objeto que vc retorna numa thread é dela e ng tasca
[quote=louds]O Service Locator é uma forma de Factory.
Fora isso você está misturando a camada de persistencia com a de negocios.[/quote]
Uma Framework de persistência já implementa a separação da camada de negócio?
É q estou estudando Struts e pretendo começar a estudar algum Framework para trabalhar com persistência.
Ja que usaram meu nome (iniciais?) em vao, eu vou dar pitaco tambem.
Nao use ServiceLocators nem Factories. Ja tiveram todo o trabalho de fazer uma PUTA factory generica, que eh o Spring. Se voce tiver sem saco de usar o Spring, ou ficar com nojinho do XML, voce pode usar o PicoContainer. Mas nao faca ServiceLocator ou Factory na mao, a menos que vc queira consertar depois. Pq ninguem faz isso direito
E por favor - se resolver fazer, conserte mesmo. Nao va deixar como legado para outros desenvolvedores inocentes.
Sobre GUJ+Google: sim, reparei que ta rolando mesmo. Inclusive algumas pesquisas que faco retornam o GUJ na primeira pagina… ontem mesmo pesquisei por “Eclipse 3.1M4 Lomboz” e adivinhem qual foi o primeirao da lista? (e eu nem pedi pra pesquisar apenas em portugues)
Shoes, porque não usar Hibernate em sistemas simples? Não vejo problema nenhum… Alguns podem dizer que é muito esforço pra pouco ganho, ou algo assim, mas só de não ter que botar a mão em SQL e iterar sobre ResultSets pra montar Collections, já vale a pena, na minha opinião.
Mas o DAO é válido nos dois casos. Exemplo foi um sistema simples que eu fiz pra um órgão interno da facul… Nunca tinha usado Hibernate, e comecei usando JDBC + DAO + WebWork. Depois resolvi usar o Hibernate, e sabe o que eu precisei mudar? O components.xml do XWork, pra instanciar meus HibernateDAOs ao invés dos JDBC…
[quote=caiofilipini]
Shoes, porque não usar Hibernate em sistemas simples? Não vejo problema nenhum… Alguns podem dizer que é muito esforço pra pouco ganho, ou algo assim, mas só de não ter que botar a mão em SQL e iterar sobre ResultSets pra montar Collections, já vale a pena, na minha opinião. [/quote]
Tudo dependo do que é simples para você ou para mim. Se eu precisar fazer apenas uma consulta a um SGBD no sistema todo, não vou usar hibernate
Não dá pra usar tamanho único, não dá para catalogar baseado em conceitos como simplicidade… enfim, só tem uma cosia que te diz: experiência e muitas horas perdidas consertando alguma merda.
cv, autoriza o Lipe a fazer um logo ‘salvem as focas’ ae, tipo o que se fez no CJ’04 8) pra colocar em blog, assinatura, camiseta, camisinha, cartaz em ônibus, envelopar as barcas da baia de guanabara…
(sim, eu gosto de dar trabalho pros outros)
Por que usar struts: ibm, bea, sun, oracle, ford, toyota, gm, deustchebank, bank boston, oesp, folha, ig …
Não sei, trabalhei em poucos lugares. Não deve servir de opinião o fato de 100% dos lugares utilizarem struts, e em geral “isto” ser um requisito do cliente.
Territorial Pissings
Assim segue… Se é verdade que o “profeta falou”, pobres foquinhas…