Quale schema uso e come posso implementarlo per un metodo che verrà gestito in più modi

0

Il mio scenario: sto creando un'applicazione che mi permetterà di creare una mappatura di url di reindirizzamento che punti dall'URL di richiesta (l'url nella vecchia soluzione di e-commerce) all'URL di destinazione. Ci saranno molteplici implementazioni in quanto abbiamo diverse soluzioni di e-commerce che si stanno spostando verso il nostro nuovo.

Lavoro in Laravel e ho creato un'azione controller che attualmente restituisce in JSON l'URL di reindirizzamento per UNA delle nostre attuali soluzioni di e-commerce. L'implementazione di questo metodo sarà molto diversa da una soluzione all'altra.

Potrei essere "sporco" e creare una classe astratta come storeAbstract e ogni store lo estende e io guardo solo il store_type inviato al controller e uso la classe corretta.

È così che l'ho sempre fatto, ma sto cercando di espandere i miei orizzonti e mi sono degnato di trovare un modello di progettazione che si adatti a questa situazione. Se qualcuno ha qualche suggerimento su quale modello di progettazione dovrei usare e su come lo implementerei in laravel, sarebbe molto apprezzato.

Esempio di come lo farei ora:

Abstract class AbstractStore {
    public function getRedirectUrls() {}
}

class StorefrontStore extends AbstractStore {
    public function getRedirectUrls(){
        // code to get the redirect urls
    }
}

class <ecommstore>Store extends AbstractStore {
    public function getRedirectUrls(){
        // code to get the redirect urls
    }
}

Questo sembra molto semplice e deve esserci un modo migliore.

    
posta Bill Garrison 04.02.2015 - 00:27
fonte

2 risposte

4

Questo è un caso d'uso classico per una fabbrica astratta .

Avresti un'unica interfaccia e quindi separerai le fabbriche concrete per ogni singola implementazione. Dovresti quindi utilizzare metodi di fabbrica per controllare l'inizializzazione di ogni serie di fabbriche.

    
risposta data 04.02.2015 - 00:41
fonte
2

Puoi utilizzare il modello di strategia per cambiare funzionalità essenziali. Questo sembra essere più sul comportamento che sulla creazione di diversi tipi di sottotipi di un supertipo, quindi il modello di strategia comportamentale mi sembra più appropriato del modello creativo di Factory Factory, anche se possono essere combinati: modello di strategia per il comportamento di commutazione, modello Abstract Factory per creare le strategie ... anche se dovresti considerare se tale complessità sia effettivamente necessaria.

Usando "Strategia" avresti una URLMappingStrategy astratta e le strategie concrete assegnate alle varie soluzioni di e-commerce sotto un'interfaccia IURLMappingStrategy comune. Il router richiede quindi l'interfaccia ed è composto da un'implementazione concreta (per la rispettiva piattaforma di e-commerce) e invia chiamate a un mapURL -method alla strategia concreta con cui è stato costruito (memorizzato per riferimento in un campo del Router)

    
risposta data 04.02.2015 - 00:51
fonte

Leggi altre domande sui tag