Padrão de Projetos

8 respostas
I

Boa tarde senhores,

Como ainda sou iniciante em programação surgem muitas dúvidas, uma delas é o padrão de projeto MVC e o padrão de projeto MVP, sinceramente ainda não consigo identificar se estou ou não utilizando os mesmo.

Vamos ao meu exemplo.

Estou desenvolvendo uma aplicação em java desktop!

Bem dividi minha aplicação da seguinte maneira:

1 - Tenho minhas classes BEAN.

2 - Tenho os DAO correspondente aos meus BEAN, (para persistencia de dados apenas). Aonde tenho métodos de excluir, inserir, e listar, no meu DAO esta todo o meu “SQL”, o DAO por si só ja é um padrão de projeto, acredito eu!

3 - Tenho Uma Classe para Conexão com Banco de Dados uma ConnectionFactory.

4 - Tenho minhas telas, no caso os jframe, que como eu defini são responsáveis por apresentar os dados, e as ações (utilizo Swing do Netbeans).

5 - No caso desmembrei meu código para organização da seguinte forma, criei métodos genéricos para a necessidade da minha aplicação, tenho uma classe que faz a criptografia da senha, que dependendo da situação será utilizado no DAO ou em meus Jframe.

6 - Também criei algumas classes Genéricas, que contém métodos que podem ser utilizados por todos os Jframe.

7 - Tenho uma tela (Jframe) aonde o usuário pode cadastrar, inserir, listar e excluir. Nesta Tela Dependendo da ação selecionada pelo usuário, irá chamar o método correspondente no DAO referenciado.

Resumindo:
Meus Jframe ficam responsável por apresentar as informações ao usuário, as regras de negócio, o tratamento d excessões, O DAO Responsável pela persistencia com o banco de dados, o BEAN responsável pelo encapsulamento e transmissão dos Objetos.

Até onde eu entendo desses dois padrões o MVC seria: Modelo, Visão e Controlador,
Bem o que seria preciso para eu fazer com que minha aplicação ficasse nesse Padrão?
Sinceramente não sei o que seria o modelo, e o contralodor…

Já o padrão MVP: tem a finalidade de separar a camada de apresentação das camadas de dados e regras de negócio. ou seja nas telas eu deixaria somente a validação, e a apresentação de informações, e o restante seria em classes distintas correto?

Alguem poderia me dar uma luz, pois todos os tópicos que li aqui no GUJ não conseguiram tirar essa minha dúvida.

Alguem poderia definir de forma prática em um sistema de cadastrado o MODELO, CONTROLADOR e A VISÃO?

Bem desde já agradeço a aqueles que puderem me ajudar.

8 Respostas

al.barbosa

IgorDutra,

Você pode obter uma explicação bem legal do MVC no livro do Martin Fowler, Padrões de Arquitetura de Aplicações Corporativas. Veja as páginas 71 e 315, no link para o livro (on-line):

http://books.google.com.br/books?id=vpHqYZcmeKsC&printsec=frontcover&dq=martin+fowler+padr%C3%A3o+de+arquitetura+de+aplica%C3%A7%C3%B5es+corporativas+mvc&hl=pt-BR&sa=X&ei=EN_DT8CnL4P26AGBoITZCg&ved=0CEEQ6AEwAA#v=onepage&q&f=false

O MVC é um padrão muito utilizado em aplicações Web, inclusive vários frameworks do Java são utilizados para estruturar aplicações Web no padrão MVC (ex.: Struts, JSF) - mas dá para criar aplicações Web em MVC sem framework, com servlets e JSP.
O livro discute várias formas de estruturar as camadas de uma aplicação.

I

Pergunto se em um projeto Desktop utilizando o Swing do NetBeans o padrão MVC, lembrando que é o estilo Drag and Drop?

nel

O que é o Swing do Netbeans? Eu conheço o Swing da Sun, nada além. O MVC é um padrão de projetos e não tem relação alguma com tecnologia. É basicamente uma ideia, um modelo para desenvolver o seu projeto. De modo resumido, ele apresenta um formato em que o seu projeto será divido em camadas, cada qual com sua função. Isso é muito importante, por questões com desacoplamento e posteriormente, manutenção.

Um exemplo disso, já tentou dar manutenção em uma página JSP que faz acesso ao banco de dados, por exemplo ?
Sendo assim Igor, o Swing pertence a camada que chamamos de visão, onde terá a responsabilidade de “montar a tela”. Portanto, você está falando em uma tecnologia (swing) que será aplicada na camada de visão do seu projeto, levando em consideração que ele usa do padrão MVC.

I

I

O que é o Swing do Netbeans? Eu conheço o Swing da Sun, nada além. O MVC é um padrão de projetos e não tem relação alguma com tecnologia. É basicamente uma ideia, um modelo para desenvolver o seu projeto. De modo resumido, ele apresenta um formato em que o seu projeto será divido em camadas, cada qual com sua função. Isso é muito importante, por questões com desacoplamento e posteriormente, manutenção.

Um exemplo disso, já tentou dar manutenção em uma página JSP que faz acesso ao banco de dados, por exemplo ?
Sendo assim Igor, o Swing pertence a camada que chamamos de visão, onde terá a responsabilidade de “montar a tela”. Portanto, você está falando em uma tecnologia (swing) que será aplicada na camada de visão do seu projeto, levando em consideração que ele usa do padrão MVC.
nel obrigado por responder, errei ao expressar SWING do netbens.

Sim entendo… e como eu imaginava, que o SWING, (Jframes, Jdialog) e etc… seriam a view no meu MVC, o Controller seriam minhas regras de negócios, validações, e o meu modelo seria o tratamento dessas informações, e depois disso apresentaria ao usuário VIEW

Seria isso?

Então todos os métodos de preencher uma jtable, popular um combobox, validação de dados seria meu controller?
os beans, daos, connection seriam meu modelo?
os Jframes, Jdialog seriam minha view correto?

al.barbosa

Acho que as regras de negócio ficam no modelo. No modelo ficam as classes que têm nomes que existem no domínio do negócio, como Cliente, Fatura, etc. As regras de negócio podem ficar nessas classes, dentro de métodos que executam funções que existem no negócio. Por exemplo, sacar(), depositar(), liquidarFatura(), etc. Esses métodos podem realizar cálculos e executar lógica que existe no domínio de negócio.

Então todos os métodos de preencher uma jtable, popular um combobox, validação de dados seria meu controller?

Acho que não. Acho que isso faz parte da camada de apresentação (view), exceto validação de dados, que precisa estar no modelo, para verificar se as classes de negócio atendem a todas as regras. Em alguns casos a validação pode estar na view também, mas a garantia que os objetos são válidos deve estar no modelo. Até porque uma classe do modelo pode ser utilizada por mais de uma view.

Se os seus beans (Javabeans) são classes de domínio do negócio concordo que são modelo. Já os DAO’s e connection são uma outra camada, acho que pode chamar de camada de integração ou camada de acesso a dados.

Sim.

Cito abaixo Martin Fowler:

Nem sempre é preciso ter uma camada controller em aplicações desktop. É preciso avaliar se vale a pena. Mas acho importante separar o modelo da apresentação. Uma boa maneira de fazer isso é utilizar o padrão Observer (Gangue dos Quatro).

Já em aplicações Web é bastante comum usar o MVC.

Há um outro tipo de controlador que fica na camada model ou camada de domínio. É um controlador que possui conceitos de negócio, e pode coordenar diversas classes de negócio. Esse tipo de controlador pode representar um caso de uso ou o sistema como um todo. Ele é descrito no livro Utilizando UML e Padrões de Craig Larman.

Nesse mesmo livro (pág. 322 da 3a. edição), Craig Larman diz que no Processo Unificado e no método Objectory de Jacobson há três tipos de objetos:

  • objetos de fronteira - abstrações das interfaces (por exemplo, classes Swing).
  • objetos de entidade - objetos de domínio (negócio ou modelo) independentes da aplicação e geralmente persistentes.
  • objetos de controle - são tratadores de caso de uso - são os controladores que ficam na camada de domínio, de que falei.
I

Acho que as regras de negócio ficam no modelo. No modelo ficam as classes que têm nomes que existem no domínio do negócio, como Cliente, Fatura, etc. As regras de negócio podem ficar nessas classes, dentro de métodos que executam funções que existem no negócio. Por exemplo, sacar(), depositar(), liquidarFatura(), etc. Esses métodos podem realizar cálculos e executar lógica que existe no domínio de negócio.

Então todos os métodos de preencher uma jtable, popular um combobox, validação de dados seria meu controller?

Acho que não. Acho que isso faz parte da camada de apresentação (view), exceto validação de dados, que precisa estar no modelo, para verificar se as classes de negócio atendem a todas as regras. Em alguns casos a validação pode estar na view também, mas a garantia que os objetos são válidos deve estar no modelo. Até porque uma classe do modelo pode ser utilizada por mais de uma view.

Se os seus beans (Javabeans) são classes de domínio do negócio concordo que são modelo. Já os DAO’s e connection são uma outra camada, acho que pode chamar de camada de integração ou camada de acesso a dados.

Sim.

Cito abaixo Martin Fowler:

Nem sempre é preciso ter uma camada controller em aplicações desktop. É preciso avaliar se vale a pena. Mas acho importante separar o modelo da apresentação. Uma boa maneira de fazer isso é utilizar o padrão Observer (Gangue dos Quatro).

Já em aplicações Web é bastante comum usar o MVC.

Há um outro tipo de controlador que fica na camada model ou camada de domínio. É um controlador que possui conceitos de negócio, e pode coordenar diversas classes de negócio. Esse tipo de controlador pode representar um caso de uso ou o sistema como um todo. Ele é descrito no livro Utilizando UML e Padrões de Craig Larman.

Nesse mesmo livro (pág. 322 da 3a. edição), Craig Larman diz que no Processo Unificado e no método Objectory de Jacobson há três tipos de objetos:

  • objetos de fronteira - abstrações das interfaces (por exemplo, classes Swing).
  • objetos de entidade - objetos de domínio (negócio ou modelo) independentes da aplicação e geralmente persistentes.
  • objetos de controle - são tratadores de caso de uso - são os controladores que ficam na camada de domínio, de que falei.

Muito obrigado…
Tirei todas as minhas dúvidas, resumindo, estou utilizando duas camadas na minha aplicação desktop, não estava conseguindo visualizar o controller e como aplicar ele no desktop, enfim agradeço pela explanação.

Alguem teria um exemplo de um controller para desktop?

Arthemus

Igor, apenas complementando um pouco, de uma olhada nesse link do livro de padrões de projeto da Head Fish:

http://books.google.com.br/books?id=GGpXN9SMELMC&pg=PA26&dq=head+fish+design+patterns&hl=pt-BR&sa=X&ei=dIbgT_DOMsbl6QHmiaB_&ved=0CD4Q6AEwAA#v=onepage&q&f=false

Olhe na página 532, tem um bom exemplo de como utilizar os padrões juntos formando o MVC, pode te ajudar um pouco.

Criado 28 de maio de 2012
Ultima resposta 19 de jun. de 2012
Respostas 8
Participantes 4