Dúvida Facade

Pessoal, estou desenvolvendo um sistema e surgiu algumas dúvidas em relação ao Padrão Facade.

Na minha aplicação tenho as entidades USUARIO, NOTICIA, BANNER

Implementando conforme um exemplo que achei utilizando o Facade ficou da seguinte maneira:

xhtml --> UsuarioMB --> UsuarioFacade –> UsuarioDAO – Usuario
xhtml --> NoticiaMB --> NoticiaFacade –> NoticiaDAO – Noticia
xhtml --> BannerMB --> BannerFacade –> BannerDAO – Banner

Nos 3 Facades acima tenho métodos criar/alterar/excluir/consultar(CRUD)

Eis a dúvida, o certo não seria criar um único Facade que faria ligação com todos DAOs?
Se sim, como devo implementar isso? Devo utilizar outro padrão junto com o Facade? e/ou devo utilizar Generics?

Desde já agradeço.

sim!
o ideal é encapsular todos os metodos e ser chamado por apenas um!

link ideal para tirar suas duvidas : http://www.devmedia.com.br/padrao-de-projeto-facade-em-java/26476

Olha, seu codigo poderia ficar mais bonito (minha opnião) assim:

xhtml --> UsuarioMB -->Facade --> UsuarioRN --> UsuarioDAO – Usuario
xhtml --> NoticiaMB --> Facade --> NoticiaRN --> NoticiaDAO – Noticia
xhtml --> BannerMB --> Facade -->BannerRN --> BannerDAO – Banner

Classe Genérica.

public abstract class AbstractFacade<T> {

    public void salva(T entity) {
        ...
    }

    public void remove(T entity) {
        ...
    }

    public T procura(Object id) {
        ...
    }

    public List<T> listaTodos() {
        ...
    }
}

Exemplo Classe PessoaFacade (Utilizando a classe de entidade Pessoa) herdando da classe genérica.


public class PessoaFacade extends AbstractFacade<Pessoa> implements PessoaFacadeImpl {
     
   //Nesta classe, implementar as regras específicas para a pessoa e depois expor os métodos na interface.

}

Interface.

public interface PessoaFacadeImpl {

    void salva(Pessoa p);

    void remove(Pessoa p);

    Pessoa procura(Object id);

    List<Pessoa> listaTodos();

}

Exemplo de chamada no MB via DI.

public class PessoaManagedBean {

    @EJB
    private PessoaFacadeImpl pessoaImpl;

{

Espero ter ajudado.

[quote=maaarkin]Olha, seu codigo poderia ficar mais bonito (minha opnião) assim:

xhtml --> UsuarioMB -->Facade --> UsuarioRN --> UsuarioDAO – Usuario
xhtml --> NoticiaMB --> Facade --> NoticiaRN --> NoticiaDAO – Noticia
xhtml --> BannerMB --> Facade -->BannerRN --> BannerDAO – Banner [/quote]

É exatamente dessa forma que pretendo fazer, um único Facade na aplicação e separando a regra de negócio.

Mas é aí que tá, o único jeito que sei fazer é colocando todos métodos no facade, Ex.: incluirUsuario, alterarUsuario, incluirNoticia, AlterarNoticia, incluirBanner, alterarBanner etc

Creio que a forma ideal seria deixar apenas os métodos criar, alterar, excluir, pesquisar e fazendo suas respectivas chamadas de acordo com a entidade que passar.
Alguém teria algum exemplo implementando dessa forma?