Tworze prosty projekt na uczelnie w którym muszę omówić klka wzorców projektowych. Ogólnie cala przykładowa aplikacja oparta jest na wzorcu MVC, ale przechodząc do sedna chciałbym zapytać o implementację wzorca fasada. Wszędzie jest głownie o jego prostocie, a większość przykładów podpisana jest jako mocno naciągane.
W kodzie napisanym przeze mnie na podstawie url wywołuję odpowiedni controller/metodę i w poszczególnych metodach odwołuje się do modelu gdzie obsługuje zapytania sql a następnie dane z modelu przekazuję do widoku.
Implementując Fasadę dodałem klasę Account której to metody porozumiewają się z modelem i wykonują zadania na podstawie jeszcze wywołań z kilku innych klas. Natomiast w kontrolerze przygotowuję tylko dane od użytkownika, następnie przekazuję je do klasy Account i jeśli jest jakiś zwrot to przekazuje te dane do widoku.
Czy taki przykład może byc uznany za poprawną implementację Fasady?
Poniżej przykład aby było łatwiej zrozumieć o co mi chodzi.
class Controller{
public function logout() {
$this->account->logout();
}
public function login() {
$user = null;
$message = '';
$responseType = $_POST['ajax_response'] ?? 'HTML';
if (isset($_POST["login"]) || isset($_POST['ajax_response'])) {
$userIdentity = !empty($_POST['username']) ? trim($_POST['username']) : null;
$password = !empty($_POST['password']) ? trim($_POST['password']) : null;
$message = $this->account->loginUser($userIdentity, $password);
}
...
$output->display();
return;
}
}
class Account{
public function logout() {
if (Session::checkIsLoggedIn()) {
Session::remove();
}
Redirect::to("/");
}
public function loginUser($userIdentity, $password) { // poprawne
Session::redirectIfLogged();
$user = null;
$user = $this->_model->getUser($userIdentity);
$authResponse = Authorization::validateUser($user, $password);
if ($authResponse === true) {
....
Redirect::to("/");
} else {
return $authResponse;
}
}`
}