none
MVC e design patterns RRS feed

  • Pergunta

  • Bom dia pessoas!

     

    Bom começarei desenvolvendo uma aplicação aqui e fui questionada sobre qual seria o MVC que eu deveria usar.

    Como minha aplicação é Desktop, acredito eu que essa idéia já é implicita.

    Estou certa???  Ou existe MVC para desktop no .net?

     

    Gostaria também de sugestões sobre design patterns.

     

    Grata

    Fabiana

    segunda-feira, 28 de maio de 2007 11:57

Respostas

  • Boa tarde Fabiana,

     

    Bom, vou tentar dar uma exemplo prático de implementação de MVC em aplicação desktop.

     

    Vamos imaginar um sistema bem simples de cadastro de clientes.

    O seu form com o grid e os campos para preencher o cadastro seria a sua view.

    O modelo seria a classe de cliente com os atributos próprios de um cliente: nome, cpf, sexo, data de nascimento, etc.

    O controle seriam as classes que iriam orquestrar os objetos de modelo e chamar as respectivas views. Vamos supor que você tenha uma classe de controle chamada ControleCliente (não foi um bom exemplo, mas da pra explicar). Nessa classes você iria ter métodos como:

    public Cliente LocalizarCliente(string cpf)

    public Cliente[] PesquisarCliente(string nome)

    public void PersistirCliente(Cliente cliente) // Esse método pode chamar seu framework de acesso a dados para salvar o cliente.

    E assim por diante.

     

    Dessa forma a camada de controle é responsável por orquestrar as classes do modelo e envia-las para a view.

    Qualquer coisa pode falar.

     

    Abraços,

    André Azevedo

    segunda-feira, 28 de maio de 2007 16:21
  • Fabiana,

    Na verdade o modelo de domínio (Domain Model) é uma parte dessa arquitetura. O modelo de domínio é a camada de modelo que citei no post anterior

    Esse exemplo que dei é apenas o MVC clássico.

    Ainda existem outras arquiteturas mais robustas, com mais camadas, como: camada de interface, camada de regras de negócio, camada de serviço, modelo de domínio, camada de integração, etc. A arquitetura a ser utilizada depende do projeto que você estiver desenvolvendo.

     

    Abraços,

    André Azevedo

    segunda-feira, 28 de maio de 2007 18:10
  • Fabiana,

     

    O que o Igor quis dizer é que é possível desenvolver em WinForms aplicando boas práticas ou não. Apesar de você achar que está isto implícito, o framework em si não força ou sugere a aplicação de um pattern ou outro. Não há nada de errado com isto pois o .Net Framework não tem este objetivo.

     

    Desta forma nós desenvolvedores temos que decidir quais design patterns se aplicam melhor ao nosso problema e como iremos aplicar. Dividir uma aplicação  em camadas é fundamental mais não é suficiente se você está arquitetando uma solução grande e/ou complexa e deseja que ela seja manutenível.

     

    Existem Design patterns para diversos problemas comuns do desenvolvimento de software, camada de acesso a dados, camada de interface, integração, etc.

     

    O MVC é um dos design patterns específicos para UI mas existem outros como MVP (Model View Pattern). Você deve buscar o que melhor resolve o seu problema. O CAB (Composite UI Application Block) sugerido pelo Igor pode ser usado tanto para uma implementação do MVC como de um MVP.

     

    Outro projeto, que ainda está na fase inicial, mas pode te ajudar a aprender, é o NMVP. Um framework para implementação de MVP: http://www.codeplex.com/nmvp

     

    Os outros patterns que você citou: Transaction Script, Table Module e Domain Model, não são variações do MVC, mas sim patterns de camada de domínio.

     

    Se você está realmente interessada nesta área sugiro que visite o web-site do Martin Fowler (http://martinfowler.com/), especialmente a área dedicada a Enterprise patterns: http://martinfowler.com/articles/enterprisePatterns.html

     

    Ele também é autor de uma das bíblias dos Design patterns: http://www.amazon.com/exec/obidos/ASIN/0321127420 (talvez já exista em português)

     

    Espero ter confundido ainda mais sua cabeça Smile

     

    Eduardo Miranda

    http://www.eduardomiranda.net/blogs/dotnet

    terça-feira, 29 de maio de 2007 21:29
  • Só uma observação: MVP = Model View Presenter.

     

    Paz!

    http://andre-uchoa.blogspot.com

    quarta-feira, 30 de maio de 2007 00:00

Todas as Respostas

  • Dê uma olhada no Composite UI Application Block - ele facilita muito a implementação de MVC no desktop:

     

    http://www.codeplex.com/smartclient/Wiki/View.aspx?title=Composite%20UI%20Application%20Block&referringTitle=Home

     

    E respondendo à sua pergunta inicial: Não, MVC não é implícito em aplicações desktop. Pelo contrário. É mais fácil "bagunçar" as camadas numa aplicação desktop que numa web.

    segunda-feira, 28 de maio de 2007 12:19
  • Primeiro, Obrigado pela dica. Vou olhar o site.

     

    Segundo, pq é mais fácil "bagunçar" as camadas numa aplicação desktop?

    Vc poderia me explicar num exemplo prático como implementar MVC em desktop?

     

    Para mim isso é um assunto novo, se vc tiver mais sites que dão dicas sobre eu agradeceria bastante.

     

    Obrigado pela atenção

     

    Fabiana

    segunda-feira, 28 de maio de 2007 12:53
  • Boa tarde Fabiana,

     

    Bom, vou tentar dar uma exemplo prático de implementação de MVC em aplicação desktop.

     

    Vamos imaginar um sistema bem simples de cadastro de clientes.

    O seu form com o grid e os campos para preencher o cadastro seria a sua view.

    O modelo seria a classe de cliente com os atributos próprios de um cliente: nome, cpf, sexo, data de nascimento, etc.

    O controle seriam as classes que iriam orquestrar os objetos de modelo e chamar as respectivas views. Vamos supor que você tenha uma classe de controle chamada ControleCliente (não foi um bom exemplo, mas da pra explicar). Nessa classes você iria ter métodos como:

    public Cliente LocalizarCliente(string cpf)

    public Cliente[] PesquisarCliente(string nome)

    public void PersistirCliente(Cliente cliente) // Esse método pode chamar seu framework de acesso a dados para salvar o cliente.

    E assim por diante.

     

    Dessa forma a camada de controle é responsável por orquestrar as classes do modelo e envia-las para a view.

    Qualquer coisa pode falar.

     

    Abraços,

    André Azevedo

    segunda-feira, 28 de maio de 2007 16:21
  • André

     

    Eu programo dessa forma já. Pra mim isso é implicito, em .Net temos que programar assim em camadas.

     

    É que fui questionada por qual modo seria minha implementação. Existe um nome pra essa idéia?

     

    Por exemplo andei pesquisando: Transaction Script, Table Module e Domain Model seriam tipos de MVC?

     

    Este exemplo que você deu se encaixa em qual deles?

     

    Se eu estiver viajando, desculpe mas estou aprendendo sobre essa parte de ánalise e arquitetura.

     

    Muito obrigada

    Fabiana

    segunda-feira, 28 de maio de 2007 17:01
  • Fabiana,

    Na verdade o modelo de domínio (Domain Model) é uma parte dessa arquitetura. O modelo de domínio é a camada de modelo que citei no post anterior

    Esse exemplo que dei é apenas o MVC clássico.

    Ainda existem outras arquiteturas mais robustas, com mais camadas, como: camada de interface, camada de regras de negócio, camada de serviço, modelo de domínio, camada de integração, etc. A arquitetura a ser utilizada depende do projeto que você estiver desenvolvendo.

     

    Abraços,

    André Azevedo

    segunda-feira, 28 de maio de 2007 18:10
  • Fabiana,

     

    O que o Igor quis dizer é que é possível desenvolver em WinForms aplicando boas práticas ou não. Apesar de você achar que está isto implícito, o framework em si não força ou sugere a aplicação de um pattern ou outro. Não há nada de errado com isto pois o .Net Framework não tem este objetivo.

     

    Desta forma nós desenvolvedores temos que decidir quais design patterns se aplicam melhor ao nosso problema e como iremos aplicar. Dividir uma aplicação  em camadas é fundamental mais não é suficiente se você está arquitetando uma solução grande e/ou complexa e deseja que ela seja manutenível.

     

    Existem Design patterns para diversos problemas comuns do desenvolvimento de software, camada de acesso a dados, camada de interface, integração, etc.

     

    O MVC é um dos design patterns específicos para UI mas existem outros como MVP (Model View Pattern). Você deve buscar o que melhor resolve o seu problema. O CAB (Composite UI Application Block) sugerido pelo Igor pode ser usado tanto para uma implementação do MVC como de um MVP.

     

    Outro projeto, que ainda está na fase inicial, mas pode te ajudar a aprender, é o NMVP. Um framework para implementação de MVP: http://www.codeplex.com/nmvp

     

    Os outros patterns que você citou: Transaction Script, Table Module e Domain Model, não são variações do MVC, mas sim patterns de camada de domínio.

     

    Se você está realmente interessada nesta área sugiro que visite o web-site do Martin Fowler (http://martinfowler.com/), especialmente a área dedicada a Enterprise patterns: http://martinfowler.com/articles/enterprisePatterns.html

     

    Ele também é autor de uma das bíblias dos Design patterns: http://www.amazon.com/exec/obidos/ASIN/0321127420 (talvez já exista em português)

     

    Espero ter confundido ainda mais sua cabeça Smile

     

    Eduardo Miranda

    http://www.eduardomiranda.net/blogs/dotnet

    terça-feira, 29 de maio de 2007 21:29
  • Só uma observação: MVP = Model View Presenter.

     

    Paz!

    http://andre-uchoa.blogspot.com

    quarta-feira, 30 de maio de 2007 00:00
  • Olá pessoal

    Pra mim estes termo desing patterns e mvc eh novo pra mim, sou um aprendiz na área e  aprendendo .NET agora. 
    Buscando aprimorar meus conhecimentos, estou desenvolvendo um aplicativo simples de controle de projetos, de estoque e notas fiscais.Venho encontrando dificuldades em atualizar meu sistema, e estou pensando em  modularizar ,  dividir em camadas...  sempre pesquisando e buscando materiais sobre boas praticas.

    Gostaria de saber como ficaria a metodo MVC, separar a apresentação, logica de negocio e controle aonde tenho:

      -  Tela Entrada de Materiais e Nota Fiscal
      - atualizando as  3 tabelas :  NotaFiscal --> Itens <-- Materiais (atualizando apenas o estoque de materiais)
     
    Tenho dificuldades de entender, aonde tenho 3 tabelas aonde Entrada de Notas insere NotaFiscal com uma lista de Materiais, consequentemente somando o estoque.

    alguem pode me dar um exemplo simples e prático?

    desde já agradeço
                      
    quinta-feira, 7 de junho de 2007 09:04
  • Olá BinhoZ, você ja notou como os bancos trabalham?.

    Você ja deve ter utilizado algum banco pela internet, e algum caixa eletrônico para realizar algum procedimento no banco (Transferência, Pagamentos e etc.).

    O que acontece quando você utiliza o banco pela internet, você faz uma solicitação de transferência e essa solicitação passa por um controlador que no caso é web e estiver tudo corretamente ela é enviada do modelo de negócio do software do banco, onde será feita a gravação dos dados no banco de dados e todas as outras operações que sejam necessárias por parte do banco.

    Quando você for utilizar um caixa eletrônico, vai acontecer a mesma coisa só que desta vez o controlador é para windows forms por exemplo.

    Você conseguiu perceber que o modelo de negócio é o mesmo? o que realmente mudou foi o controlador e a interface do usuário?

    Isso é MVC na prática, onde as camadas ficam transparentes para o sistema e para o usuário.

    Espero ter esclarecido sua dúvida.

    Flwww




    sexta-feira, 8 de junho de 2007 12:56
  • Boas

     

    Valew sublyer, 

     

     

    então  por  exemplo: 

    camada de apresentação:, eh o windows form, web page?

    camada de negócio: fica todos tipos de validações , verificação de dados e regras de negócios ?

    camada acesso a dados: fica o controle de conexão, ado.net, como dataadapters e datareaders da vida?

     

    agora, a camada de negócio em uma aplicação de banco online fica do lado servidor?

     

    acho que eu entendi... confirmem por favor ..

     

    adoro isso, quero me especializar em arquitetura

     

     

    sexta-feira, 8 de junho de 2007 15:58
  •  

    Como disse antes existem design patterns para resolver diversos problemas. Para a arquitetura de um aplicativo inteiro, como você está perguntando, você terá que aplicar mais de um pattern. O MVC resolve o problema da UI e da interação desta com a camada de negócios. Para as outras camadas você terá outros patterns como o DAO ou Action Record, para a camada de dados.

     

    O Jeremy Miller está escrevendo uma série sobre MVP, neste post ele fala quais são as responsabilidades de cada pedaço da solução. Como o o MVC é semelhante ao MVP, você poderá entender um pouco melhor o que vai aonde.

    http://codebetter.com/blogs/jeremy.miller/archive/2007/06/10/build-your-own-cab-part-8-model-view-presenter-wrapup.aspx

     

    Eduardo Miranda

    http://www.eduardomiranda.net/blogs/dotnet

     

     

     

     

     

    segunda-feira, 11 de junho de 2007 12:15