Adicionando alguns desafios no desenvolvimento em Flex e consequentemente adotando boas pratícas de programação, fui enconrajado aplicar o padrão de projeto MVC no meu atual desafio. Trata-se de um sistema em Flex onde iremos fazer consultas e alterações no Banco de Dados.

O MVC é um excelente padrão de projeto para se aplicar durante o desenvolvimento de aplicações Flex, ele divide as responsabilidade do projeto, facilitando assim seu reuso de codígo, e manutenção.

Uma boa analógia a se fazer com o padrão MVC é o funcionamento de uma empresa bem administrada. A empresa possuí varias equipes que se interegem entre si, sem que estas, interfira no funcionamento da outra.

Uma contratação de um desenvolvedor por exemplo, é um trabalho conjunto da equipe de RH com a equipe de Desenvolvimento. A equipe de RH jamais deve interferir no trabalho da equipe de desenvolvimento e sim obter informações desta equipe sobre o perfil do futuro desenvolvedor. Por sua vez a equipe de desenvolvimento não deve interferir no processo de seleção do usuário. Somente validar se o profissional definido pela equipe de RH é realmente o profissional desejado.

O padrão MVC trabalha da mesma Forma. Ele separa as classes em três “Equipes” distintas. A parte mais importante para se entender deste projeto é a sua divisão e a comunicação entre estas “equipes”. A seguir detalhe da divisão, neste momento irei definir “equipes”, como classes.

  • Model -> Armazena dados e toda a logída da aplicação para ser consumida na interface.
  • View -> Toda interface do usuário vai estar aqui.
  • Controler -> Responsável pelas alterações que o usuário var fazer na View e consequentemente alterar os dados da Model

Ilustrando esta teoria com um exemplo, teriamos no caso de um Check Box

  • Model -> Esta deverá armazenar o estado da Caixa, se esta marcada ou desmarcada. Informações que normamelte estão gravadas em algum lugar.
  • View -> Trata do layout da aplicação, neste caso usando o componente CheckBox do Flex, temos somente a caixinha em branco no estado desmarcado, ou caixinha colorida no estado marcado
  • Controler -> Esta define quais são as atitudes que a camada View terá quando o usuário clicar ou cometer qualquer tipo de ação neste botão. O resultado desta interação será armazenada na Model;

Vale salientar que a camada View, não se trata apenas da visualização dos dados, mas sim de qualquer interação com o usuário, como por exemplo audio ou vibração de um controle.
Comunicação entre as Classes

Depois de entender a segregação das classes, devemos entender como funciona a comunicação entre as mesmas.

  • A camada MODEL deve enviar notificações de estado para controlar as modificações da camada VIEW.
  • A camada VIEW  por sua vez, deve registrar na CONTROLLER  o recebimento das interações do usuário, solicitando dados da MODEL.
  • A camada CONTROLLER deve atualizar a MODEL e consequentemente atualizar a VIEW, com o resultado esperado pelo usuário.

Para facilitar a comunicação, cada objeto em MVC deve armazenar referencias dos outros objetos junto com suas interações. Especialmente a instancia Model precisa referenciar a View, para que a mesma seja rendenrizada.

Responsabilidade de cada Classe

Model
Como ja dito anteriormente sua principal função é armazenar os dados e fornece a aplicação metodos especificos para trabalhar com estes dados e validalar serviços. Citando o exemplo de uma aplicação de um Relogio analogico, a Model irá cuidar de disparar o metódo que irá  ter o Tick (segundos) do relógio.

View
Tudo que se relaciona com o usuário deve estar na VIEW, a view é um ouvinte das açoes do usuário e das alterações que ocorre na Model, no exemplo do relógio acima, cada alteração do metodo Tick na Model, teremos uma alteração no ponteiro do relogio que esta na VIEW.  É importante salientar, que qualquer mudança feita na view pelo usuário, esta deve ser alterado na Controler para ai sim, alterar algo na Model, a View nunca fará alteração diretamente na Model, o contrário já pode acontecer.

Controller
Esta camada ouve notificações de alterações da dados na Model pela View. A controler pode tambem fazer decisões logicas sobre a entrada destes dados, antes de enviar informações para a Model.

De maneira bem resumida e simplificada este é o padrão MVC, atualmente estou desenvolvendo a aplicação e estou desenvolvido toda a classa View. É interessante pensar que algumas coisas que eu fazia no MXML devem ser feitas agora na classe Controler. Assim que for encarando novos desáfio na utilização deste framework vou relatando. Em um novo Post.

MVC