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