MVP é uma sigla para Model-View-Presenter (modelo, visão e apresentação), que é um tipo de modelo de arquitetura de software, como o MVC.
Como este, seguimos o padrão de separar o "negócio" (regras, cálculos, verificações, dados, etc.), o "M" da sigla, da tela (bem, tela é tela :P), o "V" da sigla.
Se separamos, existe alguém que junta, certo? Sim, e este "juntador" é representado pela letra "P" (o Presenter).
Bem, melhor que explicar, vamos a codificação (programador entende melhor "programando"). Primeiramente, vamos entender as classes de modelo:
public interface IUserModel {
//Função que verifica se o usuário é válido.
//@param username string que contém o nome do usuário (obrigatório)
//@param password string que contém a senha do usuário (obrigatório)
//@return se os valores foram válidos, retorna um objeto da classe User, com as informações do usuário, caso o contrário, retorna null
public function login(username: string, password: string): User?;
}
//Implementação da interface IUserModel que usa banco de dados
public class UserDatabaseModel: IUserModel {
@implementation
public function login(username: string, password: string): User? {
...
}
}
Por que temos uma interface em modelo? Por causa da teoria de "baixo acoplamento", e por que podemos, em vez de usar uma classe que conecta em banco de dados, usar uma classe que conecta em serviços REST, por exemplo:
//Implementação da interface IUserModel que usa serviços REST
public class UserRESTServiceModel: IUserModel {
@implementation
public function login(username: string, password: string): User? {
...
}
}
Na hora de usar essas, em vez de instanciar um objeto da própria classe:
public property model: UserRESTServiceModel = new UserRESTServiceModel();
Podemos instanciar um objeto da interface:
public property model: IUserModel = new UserRESTServiceModel();
E, assim, utilizar um serviço ou outro, só mudando a instância:
public property model: IUserModel = new UserDatabaseModel();
Acho que a primeira parte esta concluída, na próxima, veremos a "V" de view (não de vingança). :)
Até mais!
Nenhum comentário:
Postar um comentário