Diciamo che sto costruendo un'applicazione in cui i clienti possono prenotare i biglietti dell'autobus. L'unica cosa che fanno è selezionare, origine, destinazione e il tipo di servizio (espresso o standard). Il sistema quindi prenoterà il biglietto contro la corretta compagnia di autobus api. L'utente non ha bisogno di scegliere il fornitore di servizi in quanto è già stato negoziato dal gestore dell'hotel con le diverse compagnie di autobus.
Lo scopo principale è evitare di modificare il codice esistente se un nuovo direttore dell'hotel desidera aggiungere, rimuovere o modificare la compagnia di autobus per un fornitore di servizi.
Ad esempio:
consumer: Hotel 1
type of service: express
service provider: Bus Co. A
consumer: Hotel 1
type of service: standard
service provider: Bus Co. B
consumer: Hotel 2
type of service: express
service provider: Bus Co. A
...
Ogni provider ha la propria API per la prenotazione e ho bisogno di generare la chiamata e il carico utile in fase di esecuzione.
Questo è quello che ho pensato di fare:
OPZIONE 1 Memorizza i dettagli delle chiamate di riposo come modello in una tabella di database come stringa con i segnaposto
contract (hotel name, type of service, api call url, payload)
Il payload verrebbe memorizzato come testo con i segnaposto.
Esempio:
informazioni sulla tabella contrat:
"Hilton New York", "express", "http://api.buscoA.com/book-ticket", "{origin:<origin>, destination:<destination>, service: expr}"
"Hilton New York", "standard", "http://api.busB.com/book", "{start:<origin>, end:<destination>, service_type: standard}"
OPZIONE 2 Memorizza i dettagli delle chiamate di riposo come modello in una tabella di database e crea un'istanza della chiamata di resto utilizzando una classe tramite la riflessione
contract (hotel name, type of service, api call url, api class name)
E verrà creata una classe per ogni API e io posso istanziare e posso istanziarla attraverso il reflection usando il valore "class name" della tabella
Esempio:
"Hilton New York", "express", "http://api.buscoA.com/book-ticket", "BusCompanyAApi"
Quindi dovrò creare una classe per ogni API e istanziare l'oggetto su richiesta per riflessione usando il nome della classe memorizzato nel database (BusCompanyAApi)
- L'opzione 1 o 2 è un modo valido per farlo?
- Esiste uno schema di progettazione che potrei usare?
NOTA: sto usando java