AngularJS, MVC, MVVM, MVP ou MVW?

Antes de começarmos exemplos com angularjs precisamos entender os conceitos de programação que ele utiliza, ou melhor, qual o padrão de arquitetura de software.

Se você procurar pela internet verá muitos sites utilizando a terminologia MVC para se referir a arquitetura utilizada pelo angular, mas verá também tantos outros se referindo a MVVM e MVP.

MVC

O padrão MVC é o que chamamos de Model-View-Controler, e está dividido da seguinte maneira:

Model: Trabalha tanto com o controller quanto com a view, notificando ambos quando ocorre mudança de estado, sendo assim, nas view as saídas sempre estarão atualizadas e nos controllers os conjuntos de dados também estarão.

View: Solicita do modelo, através do controlador, a informação que ela necessita para gerar uma representação de saída.

Controller: Pode enviar comandos para a view para alterar a apresentação. Pode também enviar comandos para o modelo para atualizar seu status.

MVC foi descrito pela primeira vez por Trygve Reenskaug em 1979 para interagir com uma maquina da XEROX que tinha um mouse, o controller era o responsável por interagir com os dispositivos externos, fazendo assim a view e o model ficarem sincronizados.

MVVM

O padrão MVVM é denominado de Model-View-ViewModel, foi desenvolvido em 2005 por John Gossman, um dos arquitetos da MicroSoft, portanto é muito utilizado por programadores que desenvolvem com esta tecnologia, um aplicativo utilizando este padrão divide-se assim:

Model: Inclui todo o código que implementa a lógica central do aplicativo e define os tipos necessários para modelar o domínio do aplicativo. Essa camada é completamente independente das camadas view e view model.

View: Define a interface do usuário usando a marcação declarativa. A marcação de vinculação de dados define a conexão entre os componentes específicos da interface do usuário e vários membros de view model (e, às vezes, de model).

View Model: Fornece destinos de vinculação de dados para a camada view. Em muitos casos, view model expõe a camada model diretamente ou fornece membros que encapsulam membros específicos da camada model. A camada view model também pode definir membros para controlar os dados que sejam relevantes à interface do usuário, mas não à camada model, como a ordem de exibição de uma lista de itens.

MVP

O padrão MVP é o Model-View-Presenter, surgiu no inicio da década de 90 e é baseado no MVC e dividido em:

Model: Define os dados que serão exibidos, ou alterados pelo usuário.

View: Exibe os dados, não contem nenhuma regra de negócio.

Presenter: Atua sobre o model e a view, quando os dados sofrem alterações no model ele recarrega a view e quando a view sofre alterações sincroniza o model.

MVW

O padrão MVW na verdade não é um padrão, MVW, significa Model-View-Whatever, ou seja, tanto faz qual padrão você acha que vai programar em angularjs, não perca tempo, apenas faça.

Vimos que todas estas denominações na verdade apenas separam a parte lógica da parte visual, não importando qual seja, o angular deixa isso bem explicito quando você cria um controller onde os dados serão tratados e o HTML com as diretivas onde os dados serão expostos.

thats-all-folks