MVC
O MVC é um padrão que serve para organizar as iterações entre os componentes da camada de apresentação.
Esse padrão define três tipos de componentes:
View são componentes que geram a parte da aplicação visível ao usuário do
sistema. Pode ser uma pagina JSP, uma Janela Swing, um arquivo XML, entre
outros.
A View deve implementar o padrão Observer em cima dos objetos do Model. Sempre que um objeto do Model mudar isso deve ser refletido nas Views que possam estar associadas ao referido objeto e conseqüentemente, nos dados que são mostrados ao usuário.
Model são os componentes que contém as informações que vão ser mostradas na View. Pode ser o próprio objeto do modelo da aplicação ou apenas uma interface para os objetos do modelo.
Controler são os componentes responsáveis por capturar solicitações vindas da View e as despacha para o Model. Além de atualizar a View apropriadamente. Para sistemas simples, onde a camada de aplicação não possui muitas funcionalidades, o Controler acaba as implementando.
O que o MVC possibilita:
Evita a utilização e proliferação de Spaghetti-Code tão frequentemente existente nas camadas de apresentação;
Desacopla a lógica de negócio da apresentação. Isto permite que uma única view tenha múltiplos controladores. Os controladores definem o comportamento de uma view, assim se uma view requere comportamento diverso, a implementação desses comportamentos deverá residir nos controladores.
Uma vez que o controlador é uma classe separada da view, este pode ser trocado quer em design time quer em runtime.
Se um novo tipo de utilizador for criado que requeira diferente comportamento ou estamos a providenciar uma nova plataforma na nossa aplicação, adicionar um novo controlador para cada view afectada pelas alterações é muito mais fácil do que modificar as próprias views, ou pior ainda ter de criar novas views para endereçar o problema.
Possibilita uma clara distinção entre o trabalho de cada programador ou mesmo equipa. Os designers têm claramente o seu espaço definido nas views, os especialistas do negócio trabalham nos models. Estes dois encontram-se apenas nos controllers.
Potencia a utilização de interfaces e facilidade de utilização de herança em qualquer das camadas minimizando efeitos adversos.