Modello di design appropriato per ottenere informazioni da classi diverse

-3

Sto lavorando su un progetto che reindirizza l'utente alla pagina personalizzata dopo l'accesso, la registrazione ecc. FYI, la pagina personalizzata può essere configurata per cliente dalle impostazioni dell'amministratore.

Sto cercando di seguire alcune linee guida del modello di progettazione per raggiungere questo obiettivo. Finora ho progettato le mie classi come sotto

File: RedirectInterface.php

interface RedirectInterface
{
    public function getUrl($customerId = null);
}

File: LoginRedirect.php

class LoginRedirect implements RedirectInterface
{
    public function getUrl($customerId = null)
    {
        // do some business logic here to get url
        $url = '/account/some-customer';
        return $url;
    }
}

File: RegisterRedirect.php

class RegisterRedirect implements RedirectInterface
{
    public function getUrl($customerId = null)
    {
        // do some business logic here to get url
        $url = '/welcome/some-customer';
        return $url;
    }
}

File: RedirectFactory - Pattern di progettazione creazionale (factory statico)

class RedirectFactory
{
    public static function build($type, $customerId)
    {
        if ($type == 'login') {
            return new LoginRedirect($customerId);
        } else if ($type == 'register') {
            return new RegisterRedirect($customerId);
        }
        throw new InvalidArgumentException ('Invalid redirect type.');
    }
}

Utilizzo:

// 1. Usage: Somewhere in customer registration code
$redirectUrl = RedirectFactory::build('register', 102)->getUrl();
header('Location: ' . $redirectUrl);

// 2. Usage: Somewhere in customer login code
$redirectUrl = RedirectFactory::build('login', 102)->getUrl();
header('Location: ' . $redirectUrl);

Quindi la mia domanda qui è:

  • Qual è lo schema di progettazione appropriato utilizzato in questo caso? come Adattatore, Fabbrica statica ecc.
  • In che modo puoi refactoring questo campione con più finitura provinciale?

Grazie

    
posta MagePsycho 18.04.2017 - 12:20
fonte

1 risposta

2

What is the appropriate design pattern used in this case?

Se intendi quale modello di design hai scelto, la risposta è, questo è il "modello di strategia" (con diverse "strategie di reindirizzamento"). Se è appropriato per il tuo caso nel tuo contesto, solo tu puoi dircelo.

How would you refactor this sample with more clincial finish?

Perché uno dovrebbe refactoring questo? Lo snippet di codice mi sembra piuttosto SOLIDO, poiché è un "modello strategico del libro". Tuttavia, vedo solo il tuo frammento di codice, non l'intero programma, e non ho ora quale tipo di evolvibilità hai davvero bisogno. Quindi se questa soluzione è una buona scelta nel tuo contesto, solo tu puoi dirlo.

Ad esempio, il modulo corrente mette la logica per trovare l'URL di reindirizzamento o l'aggiunta di nuovi URL di reindirizzamento nelle mani dello sviluppatore. Se questo è ciò che è richiesto, allora va bene. In caso contrario e si ha l'esigenza di consentire a qualcun altro di modificare quella logica mediante la configurazione, probabilmente è necessario eseguire il refactoring (o iniziare direttamente con una soluzione diversa). Ma non fare refactoring solo per motivi di refactoring, altrimenti finisci con qualcosa come FizzBuzz Enterprise .

    
risposta data 18.04.2017 - 16:00
fonte

Leggi altre domande sui tag