Chamar service ou facade do controller?

Olá a todos

Estou um pouco confuso sobre como fazer a arquitetura de uma aplicação web.
Estou utilizando JSF, portanto meu controller é um Managed Bean
Como vocês costumam fazer as chamadas à lógica de negócio da aplicação? Chamam direto do MBean, ou chamam um facade, que ficaria responsavel por coordenar as chamadas?
Por exemplo, digamos que eu tenha que chamar FotoService.alterarResolucao(foto) e logo depois FotoService.salvar(foto). Vocês chamariam esse 2 serviços direto do MBean, ou criariam ou FotoFacade.salvarFoto(foto), que então seria responsável por chamar os 2 serviços? Mesmo o facade correndo o risco de virar apenas um delegate para várias operações?

Estou meio confuso sobre como orquestrar isso, e gostaria de uma luz

boa noite, eu costumo ter o MB e dentro dele chamar uma Classe de negócios…

ex:

public class PessoaHandler {

private Pessoa pessoa = new Pessoa();

// Pessoa manager é a classe que contém minhas regras de negócios
private PessoaManager pessoaManager;

// construtor que inicializa o manager usando Spring
public PessoaHandler() {
   pessoaManager = (PessoaManager) ServiceLocator.getBean("pessoaManager");
}

public String salvar() {

     pessoaManager.salvar(pessoa);

}

}

Também poderia sim ter um façade/delegate mas eu prefiro escrever menos código, claro tem gente que gosta e acha melhor mas cada um tem sua opnião…

Olha só acabo de editar denovo pelo seguinte: quando tenho algum método que necessita de mais de uma operação no meu manager, eu crio um método e dentro do manager mesmo e faço as duas ou mais chamadas, isso se necessitar de transacao unica para as duas operações, no caso de uma der erro para ocorrer um rollback e nenhuma operação ser realizada com sucesso.
Agora se são duas operações independetes eu chamo direto do MB uma de cada vez…

[]'s

Olá!

Segundo a tia wikipedia (e também o livro do GoF), o Facade serve para abstrair complexas chamadas de métodos em diversos componentes, facilitando o acesso a um conjunto funcionalidades agrupadas. Ele permite que você consiga criar uma interface de simples acesso ao sistema, de fora pra dentro.

Caso você precise realizar algo desse tipo, então utilize um Facade. Caso precise apenas chamar os métodos dos Services normalmente, então chame direto. Tente não usar Patterns sem realmente precisar, pois é pior usar mal do que não usá-los.

Abraços

E vocês colocariam as transações ao redor dos métodos do MBean mesmo então? Me parece meio estranho isso

Nesse caso até é válido um Facade e tal, mas acho que da pra fazer algo com o próprio container, não? (AOP, JTA, não sei, não manjo muito disso)

As minhas transações estão declaradas nos manager pelo Spring… no managed bean nem faz sentido eu ter controle de transações…