Galera, tira uma duvida, por favor…
Posso usar o design pattern Facade como gerenciador dos meus controllers, no padrão MVC do JSF ?
To desenvolvendo meu projeto final e precisava da ajuda dos GUJeiros de plantao!!
agradeço
Galera, tira uma duvida, por favor…
Posso usar o design pattern Facade como gerenciador dos meus controllers, no padrão MVC do JSF ?
To desenvolvendo meu projeto final e precisava da ajuda dos GUJeiros de plantao!!
agradeço
Na minha opinião o Facade pode ser muito bem utilizado entre a camada Controller e o Model.
Tipo, o controller acessar o model através da interface Facade.
no meu caso nao é uma interface. Funciona da seguinte maneira: criei uma classe, crio atributos tipados como controladores, gerencio a instancia de apenas um facade, atraves do singleton. E meu construtor privado se encarrega de instanciar esses controladores e seus DAO’s.
O facade só se encarrega de repassar os atributos para as classes controladoras correspondentes.
Dessa maneira está dentro das normas de design patterns ?
Cara,
se vc tiver usando JEE 6 e sua aplicação nao for muito complexa, vc pode fazer facade como controller, pois na versão JEE 6 vc consegue tratar seu facade como controller com a anotação @Named.
t+
no meu caso nao é uma interface. Funciona da seguinte maneira: criei uma classe, crio atributos tipados como controladores, gerencio a instancia de apenas um facade, atraves do singleton. E meu construtor privado se encarrega de instanciar esses controladores e seus DAO’s.O facade só se encarrega de repassar os atributos para as classes controladoras correspondentes.
Dessa maneira está dentro das normas de design patterns ?
Sobre a interface que citei, não é a interface java onde temos assinaturas de métodos que devem se implementados em classes concretas.
A classe Facade é considerada uma interface, como se fosse uma interface visual onde você visualiza o acesso ao que está atrás delas.
Parece meio estranho o que você vai fazer, mas se facilita seu trabalho acho que pode ser aplicado.
Mas talvez se você usasse um framework de injeção de dependências como o Spring não resolveria? Ao meu ver sim.
entendi como funciona o Facade. Agora da uma olhada no meu codigo e vê, se há a necessidade de usar o Spring como injeção de dependencias
public class Facade {
private static Facade instance;
private Session session;
private ContaController contaController;
private FornecedorController fornecedorController;
private PessoaController pessoaController;
public static Facade getInstance() {
if (instance == null) {
instance = new Facade();
}
return instance;
}
private Facade() {
this.contaController = new ContaController(new ContaDao(session,
Conta.class));
this.fornecedorController = new FornecedorController(new FornecedorDao(
session, Fornecedor.class));
this.pessoaController = new PessoaController(new PessoaDao(session,
Pessoa.class));
}
public void removeConta(Long id) {
this.contaController.remove(id);
}
nesse meu caso, a classe ContaController, por exemplo, está anotada como uma ManagedBean com escopo de sessão. Não sei se dessa forma está correta, tendo em vista o Facade apresentado.
Preciso muito sanar essa duvida pra dar prosseguimento ao meu projeto.
Agradeço
Eu usaria o Spring e eliminava essa classe Facade.
Com o Spring você terá a instância apenas do objeto que precisa usar e quando usar. O Spring vai controlar tanta a criação dos objetos como elimina-los quando não forem necessários.
Mas se essa forma como você criou se adequou e resolveu seu problema, pode usar. Só da uma olhada no livro “Use A Cabeça - Padrões de Projeto” na parte sobre singleton, e veja que as vezes é necessário o uso de threads por conta de acesso concorrente.
pow velho, brigadao
agr… o importante pra mim eh saber se isso é um padrao de projeto recomendado dentro de outro padrao que é o MVC. Pelo que me parece, a melhor forma, o melhor codigo, com mais facilidade de manutenção, é usando Spring.
Correto?
Cara, não está legal isso aí não!
Controller serve apenas para o Template.
O Facede serve apenas para o Controller.
O DAO serve apenas para o Facede.
Aí vc misturou tudo em um lugar só, o q não é correto.
O mais correto não é usar o Spring, mas sim usar alguma coisa q faça algo da mesma maneira ou de maneira parecida com o q ele faz. Pode ser ele, mas pode usar outras coisas como o próprio CDI do java EE 6.
Nada impede que você use vários padrões no mesmo projeto. É até uma boa prática desde que não prejudique o projeto e sim simplifique.
qual a melhor maneira para eu implementar isso?
Me corrijam caso esteja enganado. Uso somente os Controllers e deixo que ele seja gerenciado pelo servidor de aplicação, no meu caso, o Tomcat, e eskeço esse padrão Facade?
O seu controller vai ter uma instância do facade.
Seu facade vai ter as instâncias dos DAOs necessários.
Os DAOs farão o acesso ao banco e, se preciso, retornará os valores para o facade. O facade, após usar e abusar dos DAOs, faz a regra de negócio necessária e retorna para o controller o resultado. O controller não faz nada além de pegar o que veio do facade e disponibilizar para o template.
Nada impede que você use vários padrões no mesmo projeto. “Desde que use de maneira correta”
acho que agora eu entendi irmao!!
brigadaço pela força!
qualquer coisa eu posto a duvida nesse msm topico.
espero q eu consiga integrar esses design patterns.