2007-11-29 - Programação em Camadas (MVC)

Programação em Camadas (MVC)

Programação em Camadas (MVC)
============================
Ouve-se muito hoje em dia falar em programação em camadas ou MVC, neste
artigo vou passar um pouco dos meus conhecimentos sobre o assunto, e como este conceito pode
ser colocado em prática no desenvolvimento não só Orientado a Objetos(OOP) mas
também no Procedural.

Para começar, MVC significa Model View Controller ou Modelo Visualização
Controle, isto porque é esta a divisão básica da programação em camadas, por
esta razão, você encontra também o termo programação em 3 níveis.

Mas pra que MVC ?
Em resumo, pra você não se perder no seu código, e ter maior produtividade. Mas vou tentar sei mais específico...
=================
Algumas Razões:
1. O Mercado usa e quer.
E com toda razão. Saber usar MVC vai acrescentar
alguns pontos no seu currículo e vários pontos na hora da entrevista.
2. Programas crescem.
Quando se faz um programa pequeno é relativamente fácil
gerenciar o que foi feito, então você pode criar seus programinhas sem MVC, e
funcionaram muito bem... praque você vai se preocupar em seguir um padrão?
Bom... Cada caso é um caso, mas na maioria das vezes esta é
justamente a mente de quem pensa pequeno e não se importa muito com a qualidade
do código que está escrevendo.
Muitas vezes estes programas crescem e se tornam muito complexos
e quase ilegíveis.
Então MVC é pra quem pensa grande, pensa no futuro quando você
não estiver entendendo muito o que fez no passado.

Em que consiste MVC?
====================
A intenção é dividir todas as funcionalidades do seu programa de forma
que fiquem organizadas nestes 3 níveis. Desta forma além do código ficar bem
legível, será mais fácil dividir tarefas entre vários desenvolvedores. E a
reutilização do código será muito mais simplificada.

Só pra ressaltar:

Quais os benefícios do MVC?
===========================
* Código segue um padrão mais legível.
* Menor dificuldade em encontrar e resolver problemas no código.
* Vários programadores pode trabalhar em uma mesma funcionalidade facilmente.
* Novos desenvolvedores que conhecem MVC terão facilidade com o código.
* Reutilização do código muito facilitada. Principalmente usando Shared Objects.

Mas MVC não é só para Programação Orientada a Objetos (OOP)?
===========================================================
Não. Sei que posso estar começando um frame... mas estou convencido que NÃO!
O que acontece, é que nas linguagens como java que usa conceitos OOP o MVC é
muito enfatizado, e isto nos dá a impressão de que ele é para OOP.
Mas nada impede que se use este conceito em um código procedural.

E oque significa cada nível ?
=============================

Model (Modelo) :
==============
Nesta camada devem ser implementadas tudo que é essencial ao
funcionamento do recurso... seria o célebro do código.

View (Visualização) :
===================
Nesta camada são implementadas as rotinas que o usuário possa
interagir, mesmo que este usuário seja uma outra aplicação, qualquer forma de
interação externa só pode ser feita pelas implemetações desta camada.

Controller (Controle) :
=====================
Esta é uma camada intermediária que traduz as informações fornecidas
pela camada view para algo legível pela camada Model e vice-versa.
Muitas vezes ela apenas repassa a chamada. Parece algo desnecessário
mas não se engane, sem ela não seria tão simples a reutilização do código.


Exemplo Teórico:
=============
Vamos imaginar que a empresa onde você trabalha solicita que você desenvolva um
programa que leia vários arquivos(ou um banco de dados), faça alguns cálculos complexos e retorne um
vetor com as informações lidas e calculadas para o usuário.

Isto pode levar algum tempo, não é?

Mas não é só isto.
Você também precisa criar várias formas do usuário acessar este programa:
Modo texto;
Modo gráfico 2D;
Modo gráfico 3D;
Modo Web;

Mas não pára por aí. Você também tem que criar isto em um tempo que você, mesmo
sendo o gênio que é, não acredita que conseguirá sozinho... você reclama disto
e seu chefe/gerente diz: Até entendo, mas não posso ampliar o prazo, o que posso fazer
e te disponibilizar mais desenvolvedores.

"E agora José ???"

"Está cansado de criar um código e ter que ficar separando fragmentos dele para
copiar e colar em outro código que faz exatamente a mesma coisa mas não sabe
como reutilizá-lo?"

"ACABARAM SEUS PROBLEMAS!!!"
"Chegou o maginífico, ultra-rápido e revolucionário:
Model Viel Controller ["Programation Planification Tabajara"]. ;-)"

Você se lembra do MVC... e coloca em prática.

como ?

Vamos dividir as tarefas:
* Um primeiro programador vai criar as assinaturas de métodos do código reutilizavel e
salvar em um objeto compartilhado em C podemos pensar no arquiv .h .
Isto vai servir para os outros desenvolvedores criarem as chamadas de método nos
seus programas.
Depois este programador vai continuar trabalhando na implementação dele.
Este é nossa camada Model.

* Um segundo desenvolvedor, irá criar retornos falsos, para serem retornados
para o código dos outros desenvolvedores enquanto este código não fica pronto.
Pra isto ele vai precisar estabelescer padrões de tipo e ojetos
e vai compilar nosso objeto compartilhado falso =|...
Isto será nossa camada Controller (temporária).

* Um terceiro desenvolvedor vai programando a interface Texto com a estrutura de menus, telas
de boas vindas, ajuda, sobre, aquela frescuragem toda que o usuário quer ter, e
deixando as partes de código que precisa da dita cuja funcionalidade com a
assintatura do método que o segundo desenvolvedor já passou...
mas lembre-se que por enquanto este método vai estar retornando um valor falso...
apenas pra não ficar parado.

Um exemplo prático que estou criando é o http://bombas.sf.net estou desenvolvendo baseado na lógica
do campominado do windows(winmine.exe) com alguma divertidas funcionalidades
adicionadas.
Minha intenção era criar um jogo que tivesse 3 interfaces, Texto, 2D e 3D.
como a lógica do jogo é uma só, eu pude criar um código de forma que fosse usado
pelos 3 modos do jogo. Compilei este código como um Shared Object que no windows
são as famosas .dll e no linux são os arquivos .so . E assim pude reutilizar
este código compartilhado com os outros modos...
No futuro, se eu quiser usar esta lógica como parte de um outro jogo será só
adicionar esta biblioteca e pronto.

Queria continuar com isto, mas está ficando muito extenso...
e vocês podem se basear no código do bombas.sf.net que já postei o link acima.

Também é verdade que estou sem tempo
talvez eu poste futuramente uma parte 2 deste artigo.

Espero que seja útil a vocês...
Qualquer dúvida, usem os comentários.

Até a próxima,
Abs.

Comentários

Postagens mais visitadas