Usuário com melhor resposta
Dúvidas sobre facade e usercontrol

Pergunta
-
Olá pessoal, como estão?
Esava lendo alguma coisa a respeito de facade e surgiu algumas dúvidas. Bom, supondo que tenho um sistema onde há vários projetos dentro dele, esses projetos estão como dlls. Dai supondo que tenha projeto de e-mails, utilitários, clientes... Gostaria de saber como o facade entra no sistema. Se ele tem que ter todos os métodos que chama toda a camada de negócio ou apenas algumas. A interface pode chamar diretamente a camada de negócio ou deve apenas invocar métodos do facade?
Outra questão é a seguinte...
Tenho criado vários usercontrols para serem utilizados em vários sistemas. Alguns desses usercontrols tem eventos que precisam ser implementados, daí a minha dúvida...
Quem deve implementar esses eventos é onde instanciou o usercontrol? Se sim, então crio uma propriedade do controle (ex. Button)´para ficar visivel p/ quem instânciou para implementar o evento?
Muito obrigado pela atenção.
Abraços,
Carlos
Respostas
-
1. Sobre Facade;
Um Exemplo de Facade, seriam as classes da sua camada de negócio. O Objetivo do facade é criar interfaces para tarefas complexas. Suponha que você têm uma classe Usuario e que toda vez que um novo usuário é cadastrado você precise desperar 2 e-mails, um para o usuário e outro para um administrador que vai fazer a liberação do acesso dele ao sistema. Se você não usar uma classe facade, você teria que fazer algo assim:
var alerta = new Alerta(); var dao = new UsuarioDao(); dao.Novo(usuarioModel); alerta.NotificaUsuario(): alerta.NotificaAdministrador():
Se você precissa-se fazer isso em vários lugares no seu sistema, a chance de esquecer de chamar alguma coisa seria grande. E outra coisa, se precisa-se mudar essa regra, você teria que ir alterando em vários lugares. Agora usando uma facade ficaria assim:
public class UsuarioBo //classe de fachada { public void CadastraUsuario(Model.Usuario usuarioModel){ var alerta = new Alerta(); var dao = new UsuarioDao(); dao.Novo(usuarioModel); alerta.NotificaUsuario(): alerta.NotificaAdministrador(): } } //Exemplo de uso var bo = new UsuarioBo(); bo.CadastraUsuario(usuarioModel);
Dessa forma fica bem mais simples, e o que era complexo para usar, ficou bem mais fácil.
Link sobre o padrão Facade: http://www.pg.cefetpr.br/coinf/simone/patterns/facade.php
2. User Control
Se a implementação do seu evento mudar para cada página, o ideal é você implementá-lo na página que o utiliza. Você pode deixar uma implementação padrão no seu usercontrol, e deixar uma referência pública a esse evento, caso for necessário você o sobreescreve na página que o utiliza.
Espero ter sido claro e caso tenha falado alguma bobagem, por favor alguém me corrija
- Sugerido como Resposta Danimar Ribeiro quinta-feira, 15 de julho de 2010 09:10
- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 13 de abril de 2011 16:01
Todas as Respostas
-
1. Sobre Facade;
Um Exemplo de Facade, seriam as classes da sua camada de negócio. O Objetivo do facade é criar interfaces para tarefas complexas. Suponha que você têm uma classe Usuario e que toda vez que um novo usuário é cadastrado você precise desperar 2 e-mails, um para o usuário e outro para um administrador que vai fazer a liberação do acesso dele ao sistema. Se você não usar uma classe facade, você teria que fazer algo assim:
var alerta = new Alerta(); var dao = new UsuarioDao(); dao.Novo(usuarioModel); alerta.NotificaUsuario(): alerta.NotificaAdministrador():
Se você precissa-se fazer isso em vários lugares no seu sistema, a chance de esquecer de chamar alguma coisa seria grande. E outra coisa, se precisa-se mudar essa regra, você teria que ir alterando em vários lugares. Agora usando uma facade ficaria assim:
public class UsuarioBo //classe de fachada { public void CadastraUsuario(Model.Usuario usuarioModel){ var alerta = new Alerta(); var dao = new UsuarioDao(); dao.Novo(usuarioModel); alerta.NotificaUsuario(): alerta.NotificaAdministrador(): } } //Exemplo de uso var bo = new UsuarioBo(); bo.CadastraUsuario(usuarioModel);
Dessa forma fica bem mais simples, e o que era complexo para usar, ficou bem mais fácil.
Link sobre o padrão Facade: http://www.pg.cefetpr.br/coinf/simone/patterns/facade.php
2. User Control
Se a implementação do seu evento mudar para cada página, o ideal é você implementá-lo na página que o utiliza. Você pode deixar uma implementação padrão no seu usercontrol, e deixar uma referência pública a esse evento, caso for necessário você o sobreescreve na página que o utiliza.
Espero ter sido claro e caso tenha falado alguma bobagem, por favor alguém me corrija
- Sugerido como Resposta Danimar Ribeiro quinta-feira, 15 de julho de 2010 09:10
- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 13 de abril de 2011 16:01
-
Olá Anderson,
Muito obrigado pelas suas exmplicações. Agora compreendi, e vou começar a aplicar em meus projetos. A última dúvida agora, minha classe de negócios tem métodos bem simples (eu procuro deixar bem simples os métodos) onde cada um desempenha um papel, tipo na BL Usuário tem um método cancelar cadastro. Daí caso a UI necessite apenas cancelar o usuário nada me impede de chamar a BL direto ao invés de chamar a classe Facade, correto?
Sobre o user control deu p/ entender legal!
Muito obrigado pela ajuda!,
Carlos
-
Correto. Você não precisa obrigatoriamente ter uma classe ou um método Facade no seu projeto. Você o cria conforme a sua necessidade. Eu citei a BL por que ela é grande candidata a ser um facade, pq é nela que ficam validações, criação de objetos DAO.
Falow =)