none
Modelagem em camadas RRS feed

  • Pergunta

  •  

    Pessoal tenho a seguinte dúvida em modelagem em camadas, por favor me ajudem a entender o que tem que ter em cada camada dessas.

     

    Camada de negócio?

    No meu entender seria o os campos que se precisa tipo as classes com o atributos?

     

    Camdas de Acesso a Dados?

    No meu entender teria as rotinas de Cadastro,Alteração/Exclusão dos dados no banco de dados?

     

     

    Camada de Apresentação?

    Seria os formulários?

     

    Atenciosamente

    terça-feira, 13 de maio de 2008 13:56

Respostas

  • Exemplo de uma situação:

     

     

    Camada de dados

     

     

     

    classeProduto.MetodoAtualizarQtdEstoqueProduto(parametroidProduto, parametroQtdASerAtualizada)

    update estoque

    set qtd = parametroQtdASerAtualizada

    where idproduto = parametroidProduto

     

    classeProduto.MetodoObterQtdEstoqueUltFechamento(parametroidProduto)

    select qtd from estoque where campoidproduto = parametroidProduto

     

     

    classeMovimento.MetodoObterQtdEstoqueSaida(parametroidProduto)

    select sum(qtd) from movimentoestoque where campoidproduto = parametroidProduto and camposaidaestoque = 'S'

     

     

    classeMovimento.MetodoObterQtdEstoqueEntrada(parametroidProduto)

    select sum(qtd) from movimentoestoque where campoidproduto = parametroidProduto and camposaidaestoque = 'N'

     

    ClasseMovimento.MetodoObterMovimentoDia(parametroApartirDe)

    select idproduto from movimentoestoque where data >= parametroApartirDe

     

    Camada de negocio

     

    Classe Estoque.MetodoFecharEstoque(parametroAPartirDe)

     

    produtosmovimentados= Camadadedados.ClasseMovimento.MetodoObterMovimentoDia(parametroAPartirDe)

     

    loop produtosmovimentados

     

    qtdestoqueultfechamento = classeProduto.MetodoObterQtdEstoqueUltFechamento(produtosmovimentados.idproduto)

     

    qtdEstoqueAAtualizar = qtdestoqueultfechamento + classeMovimento.MetodoObterMovimentoDia(produtosmovimentados.idproduto)

     

    qtdEstoqueAAtualizar = qtdestoqueultfechamento - classeMovimento.MetodoObterQtdEstqueSaida(produtosmovimentados.idproduto)

     

    classeProduto.MetodoAtualizarQtdEstoqueProduto(produtosmovimentados.idproduto,qtdEstoqueAAtualizar)

     

    fim loop

     

     

    Botão da tela

    Evento Click

    CamadaNegocio.MetodoFecharEstoque('26/05/2008')

    FIM Evento click

     

     

     

    Claro que em uma situação real uma rotina de fechamento de caixa teria uma lógica melhorada visando performance porém o objetivo deste exemplo é entender o q vai em cada camada.

     

    Esse exemplo é de uma programação simples de 3 camadas.

     

    Em uma situação real o ideal seria adicionar uma UI que chamaria uma facade que chamaria a camada de negócio passando os dados por BusinessEntity. Mas assim ja da para fazer alguma coisa.

     

     

     

     

     

     

    segunda-feira, 26 de maio de 2008 17:11
  • Olá.

    Bom como já disseram, é complicado dizer o que é certo e o que é errado, tudo depende da sua necessidade. Existem alguns projetos que você pode analisar como o PetShop, tem um projeto em N-Camadas utilizando Linq que é muito bom, e também tem um documento da Microsoft de recomendação de arquitetura de N-Camadas para .Net.

    Vou exemplificar o que eu gosto de utilizar, com uma breve explicação.

     

    Camada Apresentação: Essa camada só possui os a parte dos webForms da sua aplicação web, ou winforms para windows. Como ela não possui nenhuma regra de negócio, só faz chamadas a camada de regra de negócios, eu posso trocar de windows para web por ex. sem ter que reescrever minha regra de negócios, só as chamadas mesmo.

     

    Regra de Negócios: Essa aqui é o coração de tudo, faz validações mais complexas, solicita ou envia informações para a camada de acesso a dados, e também devolve algo para a Camada de Apresentação caso seja necessário.

     

    Camada de acesso a dados: O único trabalho dessa camada é enviar ou pegar dados do banco de dados.

     

    Um simples ex:

     

    Na Camada de Apresentação:

    Negocios.Salvar(int codigo, string nome);

    Na Camada de Negócios:

    if(codigo == 0)

    Dados.Incluir(nome);

    else

    Dados.Alterar(codigo, nome);

    // aqui eu poderia falar para salvar log das operações, antes de salvar ou incluir poderia fazer quantas validações fossem necessárias.

    Na Camada de Acesso a Dados:

    executa o comando necessário para incluir o alterar os dados no banco:

     

    Espero ter ajudado, caso a resposta for útil marque para que outras pessoas possam achar a solução com mais facilidade.

     

    Abraços.

    quarta-feira, 28 de maio de 2008 15:05
  • Por exemplo:

    Se vc tem que desenvolver um componente para um cliente que faça um calculo de seguros, seu componente

    não vai ter formulários mas mesmo assim ele terá uma camada de apresentação com métodos e propriedades dos quais o desenvolvedor que utilizará o seu componente irá interagir.

    Alexandre,

     

    No meu ponto de vista você está misturando as responsabilidades. Normalmente a Viewer se refere somente a aprensentação das informações.

     

    Olhe o ASP.NET MVC Framework ou o Castle.MonoRail, basicamente os métodos que irão interagir com os modelos, nestes frameworks ficam na Controller. Pois assim separamos as responsabilidades deixando nossas aplicações flexíveis.

     

    Basicamente é isto.

     

    []´s

     

     

     

    terça-feira, 3 de junho de 2008 20:11
  • http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3572098&SiteID=21
    segunda-feira, 29 de setembro de 2008 11:09

Todas as Respostas

  • Arquitetura não existe um jeito 100% certo de dizer aki faz assim aki faz assado.

     

    Ao meu entender a camada de apresentação não precisa necessáriamente ser os formulários.

     

    Por exemplo:

    Se vc tem que desenvolver um componente para um cliente que faça um calculo de seguros, seu componente

    não vai ter formulários mas mesmo assim ele terá uma camada de apresentação com métodos e propriedades dos quais o desenvolvedor que utilizará o seu componente irá interagir.

     

    Na camada de dados são atribuídas funcionalidades que são somente para interação com o banco de dados, e na camada de negocios são atribuídas funcionalidades como calculos, chamadas de rotinas da camada de dados etc.

     

     

     

    terça-feira, 13 de maio de 2008 20:16
  • Pessoal mais alguém poderia me ajudar com essa questão.

     

    quinta-feira, 22 de maio de 2008 13:34
  • Exemplo de uma situação:

     

     

    Camada de dados

     

     

     

    classeProduto.MetodoAtualizarQtdEstoqueProduto(parametroidProduto, parametroQtdASerAtualizada)

    update estoque

    set qtd = parametroQtdASerAtualizada

    where idproduto = parametroidProduto

     

    classeProduto.MetodoObterQtdEstoqueUltFechamento(parametroidProduto)

    select qtd from estoque where campoidproduto = parametroidProduto

     

     

    classeMovimento.MetodoObterQtdEstoqueSaida(parametroidProduto)

    select sum(qtd) from movimentoestoque where campoidproduto = parametroidProduto and camposaidaestoque = 'S'

     

     

    classeMovimento.MetodoObterQtdEstoqueEntrada(parametroidProduto)

    select sum(qtd) from movimentoestoque where campoidproduto = parametroidProduto and camposaidaestoque = 'N'

     

    ClasseMovimento.MetodoObterMovimentoDia(parametroApartirDe)

    select idproduto from movimentoestoque where data >= parametroApartirDe

     

    Camada de negocio

     

    Classe Estoque.MetodoFecharEstoque(parametroAPartirDe)

     

    produtosmovimentados= Camadadedados.ClasseMovimento.MetodoObterMovimentoDia(parametroAPartirDe)

     

    loop produtosmovimentados

     

    qtdestoqueultfechamento = classeProduto.MetodoObterQtdEstoqueUltFechamento(produtosmovimentados.idproduto)

     

    qtdEstoqueAAtualizar = qtdestoqueultfechamento + classeMovimento.MetodoObterMovimentoDia(produtosmovimentados.idproduto)

     

    qtdEstoqueAAtualizar = qtdestoqueultfechamento - classeMovimento.MetodoObterQtdEstqueSaida(produtosmovimentados.idproduto)

     

    classeProduto.MetodoAtualizarQtdEstoqueProduto(produtosmovimentados.idproduto,qtdEstoqueAAtualizar)

     

    fim loop

     

     

    Botão da tela

    Evento Click

    CamadaNegocio.MetodoFecharEstoque('26/05/2008')

    FIM Evento click

     

     

     

    Claro que em uma situação real uma rotina de fechamento de caixa teria uma lógica melhorada visando performance porém o objetivo deste exemplo é entender o q vai em cada camada.

     

    Esse exemplo é de uma programação simples de 3 camadas.

     

    Em uma situação real o ideal seria adicionar uma UI que chamaria uma facade que chamaria a camada de negócio passando os dados por BusinessEntity. Mas assim ja da para fazer alguma coisa.

     

     

     

     

     

     

    segunda-feira, 26 de maio de 2008 17:11
  • Olá.

    Bom como já disseram, é complicado dizer o que é certo e o que é errado, tudo depende da sua necessidade. Existem alguns projetos que você pode analisar como o PetShop, tem um projeto em N-Camadas utilizando Linq que é muito bom, e também tem um documento da Microsoft de recomendação de arquitetura de N-Camadas para .Net.

    Vou exemplificar o que eu gosto de utilizar, com uma breve explicação.

     

    Camada Apresentação: Essa camada só possui os a parte dos webForms da sua aplicação web, ou winforms para windows. Como ela não possui nenhuma regra de negócio, só faz chamadas a camada de regra de negócios, eu posso trocar de windows para web por ex. sem ter que reescrever minha regra de negócios, só as chamadas mesmo.

     

    Regra de Negócios: Essa aqui é o coração de tudo, faz validações mais complexas, solicita ou envia informações para a camada de acesso a dados, e também devolve algo para a Camada de Apresentação caso seja necessário.

     

    Camada de acesso a dados: O único trabalho dessa camada é enviar ou pegar dados do banco de dados.

     

    Um simples ex:

     

    Na Camada de Apresentação:

    Negocios.Salvar(int codigo, string nome);

    Na Camada de Negócios:

    if(codigo == 0)

    Dados.Incluir(nome);

    else

    Dados.Alterar(codigo, nome);

    // aqui eu poderia falar para salvar log das operações, antes de salvar ou incluir poderia fazer quantas validações fossem necessárias.

    Na Camada de Acesso a Dados:

    executa o comando necessário para incluir o alterar os dados no banco:

     

    Espero ter ajudado, caso a resposta for útil marque para que outras pessoas possam achar a solução com mais facilidade.

     

    Abraços.

    quarta-feira, 28 de maio de 2008 15:05
  • Por exemplo:

    Se vc tem que desenvolver um componente para um cliente que faça um calculo de seguros, seu componente

    não vai ter formulários mas mesmo assim ele terá uma camada de apresentação com métodos e propriedades dos quais o desenvolvedor que utilizará o seu componente irá interagir.

    Alexandre,

     

    No meu ponto de vista você está misturando as responsabilidades. Normalmente a Viewer se refere somente a aprensentação das informações.

     

    Olhe o ASP.NET MVC Framework ou o Castle.MonoRail, basicamente os métodos que irão interagir com os modelos, nestes frameworks ficam na Controller. Pois assim separamos as responsabilidades deixando nossas aplicações flexíveis.

     

    Basicamente é isto.

     

    []´s

     

     

     

    terça-feira, 3 de junho de 2008 20:11
  • http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3572098&SiteID=21
    segunda-feira, 29 de setembro de 2008 11:09