none
Dúvida na facade RRS feed

  • Pergunta

  • Bom dia,

     

    Estou desenvolvendo uma aplicação em C# onde a arquitetura adotada é a seguinte:

     

    BO --> FACADE --> dalc

     

    BUSINESS ENTITY para comunicação entre as camadas:

     

    DUVIDA: Atualmente uma das utilidades da minha camada FACADE é controlar transações, portanto gostaria de saber SE É ERRADO um método facade chamar 2 ou 3 métodos dalc

     

    Exemplo:

     

     

    Facade.AtualizaEstoque()

    {

    INICIA TRANSACAO

              Dalc.AlterarEstoque

    Dalc.AtualizarMovimentoEstoque

    COMMITA OU ROLBACK

    }

     

     

     

    quinta-feira, 19 de junho de 2008 14:17

Respostas

  • Tudo depende.

    Arquitetura tem que ser desenvolvida para resolver um problema, e não para tentar achar um para justificá-la.

    Muitas pessoas criam arquiteturas com um padrão por estar na moda, ou por estar nos sites dizendo que é certo.

    Se para seu caso esta arquitetura atende os requisitos, está certo!

     

    Abraços.

    segunda-feira, 23 de junho de 2008 18:56

Todas as Respostas

  • Alexandre,

    na minha opinião a comunicação entre as camadas está errada.

    Em um ambiente de serviços, as regras de negócio tendem a sofrer alterações até que se estabilizem. Contando com esta instabilidade, é necessário fornecer aos clientes destas regras um ponto único de entrada, uma interface comum para as funcionalidade / regras de negócio, para que alterações nesta camada não gerem alterações nas aplicações clientes que as utilizam (Baixo acoplamento - estabilidade dos assemblies relacionados).

     

    Considerando que na sua arquitetura a camada BO armazena as regras de negócio, a camada Façade teria que representar este ponto de entrada para a regra de negócio, expondo métodos com base em serviços, agrupando então as chamadas para as regras de negócio relacionadas.

     

    Façade > Business Objects > Dalc.

     

    O controle de transação, quando feito via aplicação, teria que ser feito na camada Façade, para que um conjunto de regras de negócios relacionadas tenham um mesmo comportamento transacional.

     

    Outro ponto interessante é manter os métodos das BOs o mais atômico possível. Cada método deve efetuar apenas uma tarefa bem definida. No seu exemplo, um método AtualizarEstoque da camada de negócio estaria executando a alteração de estoque a a atualização de movimento no estoque. Adaptando para o modelo que sugiro, a classe da regra de negócio implementaria um método exclusivo para cada função, se comunicando com a DALC e façade invocando os métodos. Neste modelo, conseguiriamos manter as classes sem alterações mas passíveis de extensão, uma vez que um método, quando implementado na regra de negócio, não sofreria alterações, já que sua função é única e bem definida.

     

    Espero ter ajudado com alguma coisa.

     

    Abraços.

     

    segunda-feira, 23 de junho de 2008 17:14
  • Ok, com relação ao exemplo foi somente para tentar explicar o meu problema.

     

    Com relação a arquitetura FACADE -> BO -> DALC eu andei lendo alguns artigos onde dizia que não era errado utilizar BO --> FACADE --> DALC e por esse motivo adotei essa ordem.

     

     

    segunda-feira, 23 de junho de 2008 18:07
  • Tudo depende.

    Arquitetura tem que ser desenvolvida para resolver um problema, e não para tentar achar um para justificá-la.

    Muitas pessoas criam arquiteturas com um padrão por estar na moda, ou por estar nos sites dizendo que é certo.

    Se para seu caso esta arquitetura atende os requisitos, está certo!

     

    Abraços.

    segunda-feira, 23 de junho de 2008 18:56
  • hehe valeu pela atenção

     

     

    segunda-feira, 23 de junho de 2008 19:07

  • agpcardoso,

    Avalie tbm a possibilidade de utilizar AOP ou um framework como Spring para controlar isto.

    []s
    quarta-feira, 25 de junho de 2008 13:04
  •  

    Voce pode deixar o seu FACADE chamando N metodos DAL

    Eu particulamente deixaria as transacoes para a camada DAL onde teria um cenario mais ou menos assim;

     

     

    =======================

    Assemblie FACADE Estoque

    {

    AtualizarEstoque()

    AvisarFornecedor()

    }

     

     

     

     

     

    ===================

    Assemblie DAL Estoque

     

     

    AtualizarEstoque()

    {

    INICIA TRANSACAO

              Dalc.AlterarEstoque

    Dalc.AtualizarMovimentoEstoque

    COMMITA OU ROLBACK

     

     

    }

    =======================

     

    Assemblie DAL Fornecedor

     

    AvisarFornecedor()

    {

     

    INICIA TRANSACAO

              Dalc.AlterarEstoque

    Dalc.AtualizarMovimentoEstoque

    COMMITA OU ROLBACK

     

    }

     

     

     

    Nao esta errado o que voce esta falando  , so deixaria as transacoes para o DAL Ok

    terça-feira, 8 de julho de 2008 13:32
  •  

    Voce pode deixar o seu FACADE chamando N metodos DAL

    Eu particulamente deixaria as transacoes para a camada DAL onde teria um cenario mais ou menos assim;

     

     

    =======================

    Assemblie FACADE Estoque

    {

    AtualizarEstoque()

    AvisarFornecedor()

    }

     

     

     

     

     

    ===================

    Assemblie DAL Estoque

     

     

    AtualizarEstoque()

    {

    INICIA TRANSACAO

              Dalc.AlterarEstoque

    Dalc.AtualizarMovimentoEstoque

    COMMITA OU ROLBACK

     

     

    }

    =======================

     

    Assemblie DAL Fornecedor

     

    AvisarFornecedor()

    {

     

    INICIA TRANSACAO

              Dalc.AlterarEstoque

    Dalc.AtualizarMovimentoEstoque

    COMMITA OU ROLBACK

     

    }

     

     

     

    Nao esta errado o que voce esta falando  , so deixaria as transacoes para o DAL Ok

    descordo um pouco, a transação deve ser controla um nivel a cima

    inicia a transação

    AtualizarEstoque()

    AvisarFornecedor()

    commit ou rollback

    assim se qualquer uma das operações der erro, o rollback é em tudo.

    domingo, 16 de agosto de 2015 22:07
  • Cara olha isso, achei ótimo:

    http://www.devmedia.com.br/arquitetura-em-camadas-com-c/12037

    domingo, 16 de agosto de 2015 22:11