Bem, tenho que corrigir uma coisa anteriormente: o método "login" esta síncrono, seria melhor se ele fosse assincrono, ou usando callbacks:
public function login(username: string, password: string, callback: function(user: User?, error: Error)) {
}
ou usando métodos de delegação de uma interface (que será implementada na classe de Presenter):
public interface ILoginModelDelegate {
public function onLoginSuccess(user: User);
public function onLoginError(error: Error);
}
Beleza, agora podemos continuar! (se eu não me lembrar de nada até lá...)
Se para Model, a gente fez uma interface para ela (para facilitar a mudança da origem de dados -- seja serviços REST, SOAP ou banco de dados), a gente faz a mesma coisa para a View.
Por que? -- você deve perguntar...
Pelo mesmo motivo: desacoplamento, ou seja, para que a nossa "tela" possa mudar de HTML para um serviço que retorna json ou para outro que retorna XML:
public interface ILoginView {
public property (readonly) username: string;
public property (readonly) password: string;
public function onLogin(user: User);
public function onLoginFail(error: Error);
}
public class LoginPageView: Page, ILoginView {
public property (readonly) username: string {
return txtUserName.text;
}
...
}
public class LoginRestView: Rest, ILoginView {
public property (readonly) username: string {
return request.getParameter("username");
}
...
}
Legal, né?
Bem, acho que é isso... Na próxima fica faltando só a Presenter. :)
Até mais!
Nenhum comentário:
Postar um comentário