none
Dúvidas sobre facade e usercontrol RRS feed

  • 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

    quinta-feira, 10 de junho de 2010 12:37

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

    sexta-feira, 11 de junho de 2010 11:57

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

    sexta-feira, 11 de junho de 2010 11:57
  • 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

    sábado, 12 de junho de 2010 12:18
  • 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 =)

    domingo, 13 de junho de 2010 00:04