Vamos a última parte (eu acho), a implementação da classe Presenter.
Esta classe tem como característica juntar a parte View (da segunda parte deste artigo) com a Model (da primeira parte deste mesmo).
Então temos:
//Classe de Presenter que implementa a delegação do Modelo (ILoginModelDelegate) e da View (ILoginViewDelegate)
public class LoginPresenter implements ILoginModelDelegate, ILoginViewDelegate {
//Propriedades privadas
private property model: ILoginModel;
private property view: ILoginView;
//Construtor da classe
public constructor(view: ILoginView) {
//Cria o model através de uma Fábrica (Factory)
model = Factory::instance.getModel(ILoginModel.class);
model.delegate = this;
view.delegate = this;
}
//Função de login
private function login() {
model.login(view.username, view.password);
}
@implementation
public function onLoginSuccess(user: User) {
view.onLogin(user);
}
@implementation
public function onLoginError(error: Error) {
view.onLoginFail(error);
}
@implementation
public function callLogin() {
login();
}
}
E, assim, temos a junção de tudo. Por exemplo, se fosse uma "página web":
public class LoginPageView: Page, ILoginView, OnClickListener {
private property presenter: LoginPresenter;
private property @UI okButton: UIButton;
...
public constructor() {
...
presenter = new LoginPresenter(this);
okButton.setOnClickListener(this);
...
}
...
@implementation
public function OnClick(sender: UIObject) {
presenter.callLogin();
}
....
}
Se fosse uma "Activity do Android":
public class LoginActivity: Activity, ILoginView, OnClickListener {
private property presenter: LoginPresenter;
private property okButton: Button;
...
@override
public function onCreate(savedInstanceState: Bundle) {
...
presenter = new LoginPresenter(this);
okButton.setOnClickListener(this);
...
}
...
@implementation
public function OnClick(sender: View) {
...
presenter.callLogin();
...
}
....
}
Ou se fosse um "serviço JSON":
public class LoginJSONView: JSON, ILoginView {
private property presenter: LoginPresenter;
...
public constructor {
...
presenter = new LoginPresenter(this);
...
}
...
@override
public onPost(request: Request, response: Response) {
...
presenter.callLogin();
...
}
....
}
public class LoginJSONView: JSON, ILoginView {
private property presenter: LoginPresenter;
...
public constructor {
...
presenter = new LoginPresenter(this);
...
}
...
@override
public onPost(request: Request, response: Response) {
...
presenter.callLogin();
...
}
....
}
Acho que é isso... Se eu esquecer de alguma coisa, depois eu arrumo. (errar é humano, ainda mais depois dos 40... :P )
Até mais!
Nenhum comentário:
Postar um comentário