Implementacja wzorca projektowego fasada

Odpowiedz Nowy wątek
2019-02-11 19:46
0

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;
        }
    }`
}

Pozostało 580 znaków

2019-02-12 09:38
0

Moim zdaniem nie. Ta klasa ma odpowiedzialności, których mieć nie powinna. Czemu gdzieś przekierowuje? To powinno być w kontrolerze. Czemu uparłeś się na fasadę? Jest bilion innych wzorców, które możesz wykorzystać.

edytowany 1x, ostatnio: Desu, 2019-02-12 09:39

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0