Há alguns meses fui incumbido da tarefa de modificar uma aplicação desktop, de modo que ela possa interagir também com dispositivos móveis que conectam-se a ela remotamente. Como não tinha conhecimento sequer de Orientação à objetos, dediquei-me até ao presente momento a entender o básico, e compreender como esse programa que terei que adaptar funciona. Inicialmente parecia tudo certo, o programa parecia estar utilizando o pattern MVC da maneira correta. Porém, após estudos, percebi que ele funciona de uma maneira um pouco diferente.
Teoricamente, nas aplicações MVC, a parte View da aplicação fica observando a parte Model, para poder modificar-se quando algum evento ocorre, certo? Nessa aplicação, não foi implementado assim. Existe a divisão de código normalmente, do que é control, model e view. Porém, a “camada” view não fica observando o que ocorre em model. Basicamente, quando um evento ocorre, control modifica model, e posteriormente ele mesmo (control) altera view. Exemplo: supondo um programa de cadastro de pessoas com as seguintes classes:
class Pessoa (faz parte de model)
class ControlPessoa (faz parte de control)
class ExibePessoa (faz parte de view)
Quando a instância de ControlPessoa for acionada para exibir uma pessoa, ela cria um objeto Pessoa, com dados recuperados do banco, e na própria classe ControlPessoa é criado um objeto ExibePessoa para mostrar esses dados. Se o objeto já existir ele é apenas alterado. Ou seja, ao invés de view notar que houve uma mudança em model, quem notifica essa mudança é o objeto que faz o controle. Isso está errado? Quando eu uso MVC eu sou obrigado a utilizar o pattern Observer? Mesmo com o programa inacabado, é visível que isso funciona bem e não é tão complicado fazer a manutenção. O único inconveniente que eu vi até o presente momento é o fato das classes control ficarem “poluídas” com chamadas a objetos que pertencem ao pacote view. Outro detalhe interessante é que é possível modificar toda a parte view alterando somente os elementos que pertencem a ela.
Enfim, gostaria que opinassem sobre essa maneira de construção. Se é comum, alguém já usou, e quais as vantagens de fazer assim invés de usar o pattern Observer…
Obrigado!
