[quote=tiagomac]Olá pessoal,
Então, gostaria de saber qual a diferença entre esses 2 padrões, pois ambos parecem iguais.
No meu entendimento o business object poderia carregar alguma lógica dentro de si, enquanto o façade seria exclusivamente um repassador, seria essa a diferença?
[/quote]
Business Object não é um padrão, já começa por ser um diferença. Business Object é uma categoria. Todos os objetos que pertencem ao andar (layer) de business são business objects (Wikipedia. Não se deixe enganar pelo “padrão” Business Object do Core J2EE.
Por tradição o nome Business Object se refere a essa coisa que o Core J2EE erradamente classificou como pattern. É um objeto que atua no sistema traduzindo regras do negocio. O real pattern para isso é Service.
Um serviço é um objeto sem estado que faz algo por alguem e pode conter regras de negocio se for do andar de negocios. Um service não necessariamente é de negocio (pode ser de estrutura, de integração, etc…)
Um objeto Façade é um objeto que executa uma ação e esconde do invocador quem realiza essa ação. A diferença é que um Façade tem que usar mais do que um outro objeto para realizar a ação. Um melhor nome seria Orquestrator, porque o real papel de um Façade é criar uma funcionalidade pela combinação de coisas que já existem.
Imagine-se que temos o serviço A que envia email para endereços de email e um repositorio de clientes onde é possivel pesquisar por coordenada geográfica. Um serviço C poderia , dado uma coordenada, recuprar todos os clientes perto dela e enviar um email para cada um. O serviço C teria como entradas a coordenada , o raio de acção (que define “perto”) e uma mensagem a ser colocada no email. O serviço C seria um Façade porque a implementação dele é apenas a orquestração de coisas que já existem.
Um objeto que delega para um único outro objeto é um Adapter, um Proxy ou um Decorator, dependendo da situação, das classes, etc… mas não é um Façade.