JSF - MVC utilizando o padrão de projeto Facade

14 respostas
T

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

14 Respostas

romarcio

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.

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 ?

A

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+

romarcio

thursilva:
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.

T

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);

	}
T

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

romarcio

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.

T

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?

aluisiodsv

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.

aluisiodsv

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.

romarcio

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.

T

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?

aluisiodsv

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”

T

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.

Criado 21 de setembro de 2011
Ultima resposta 21 de set. de 2011
Respostas 14
Participantes 4