Sono nel processo di pianificazione per una nuova applicazione, l'applicazione sarà scritta in PHP (usando il framework Symfony 2) ma non sono sicuro di quanto sia rilevante. L'applicazione sarà basata su browser, anche se alla fine ci sarà l'accesso API per altri sistemi per interagire con i dati memorizzati all'interno dell'applicazione, probabilmente ancora non relavent a questo punto.
L'applicazione gestisce le schede SIM per molti fornitori diversi: ogni scheda SIM appartiene a un singolo fornitore, ma un singolo cliente potrebbe avere molte carte SIM in più provider. L'applicazione consente all'utente di eseguire azioni contro la carta SIM, ad esempio attivarla, barrarla, controllarne lo stato ecc.
Alcuni provider forniscono un'API per farlo - quindi un singolo punto di accesso con più metodi, ad esempio activateSIM
, getStatus
, barrSIM
ecc. I nomi dei metodi differiscono per ciascun provider e alcuni provider offrono metodi per extra funzioni che gli altri non fanno. Alcuni provider non hanno API ma offrono questi metodi inviando email con allegati - gli allegati sono normalmente un file CSV che contiene il riferimento e l'azione SIM richiesti - l'email è elaborata dal provider e ha risposto una volta che l'azione è stata completata .
Per fare un esempio: il front-end della mia applicazione fornirà al cliente un elenco di carte SIM di sua proprietà e darà loro accesso alle azioni fornite dal fornitore di ciascuna scheda SIM specifica - alcuni metodi potrebbero richiedere dati extra che verranno memorizzati nel back-end o raccolti dal frontend dell'utente. Una volta che l'utente ha selezionato la propria azione e aggiunto i dati richiesti, gestirò il processo nel back-end e fornirò un feedback immediato, nel caso dei provider con API, o avvierà il processo inviando un'email e attendendo la sua risposta prima elaborandolo e aggiornando il back-end in modo che la volta successiva che l'utente verifichi la scheda SIM, il suo stato è corretto (cioè aggiornato da un processo di back-end).
Il motivo per cui ho creato questa domanda è perché sono bloccato !! Sono confuso su come affrontare la logica del flusso di lavoro reale. Stavo pensando di creare un'interfaccia provider con i metodi più comuni getStatus
, activateSIM
e barrSIM
e quindi implementando quell'interfaccia per ciascun provider. Quindi class Provider1 implements Provider
- Quindi usa una Fabbrica per creare la classe richiesta in base alla carta SIM selezionata dall'utente e invocando il metodo selezionato. Ciò funzionerebbe bene se tutti i provider offrissero gli stessi metodi ma non lo facessero - esiste un sottoinsieme che è comune ma alcuni provider offrono metodi aggiuntivi - come posso implementarlo in modo flessibile? Come posso gestire i processi in cui il flusso di lavoro è diverso - ad esempio alcuni metodi richiedono e la chiamata e il valore dell'API restituiti e alcuni richiedono l'invio di una e-mail e la fase successiva del processo non inizia fino a quando non viene ricevuta la risposta via e-mail. .
Per favore aiuto! (Spero che questa sia una domanda leggibile e che questo sia il posto giusto da chiedere)
Aggiorna
Immagino che quello che sto cercando di evitare sia una grande if
o switch
/ case
statement - qualche schema di progettazione che mi dà un approccio flessibile all'implementazione di questo tipo di flusso di lavoro fluido .. qualcuno?