Sto cercando di sviluppare un'API che cerchi di integrare le funzionalità di vari fornitori di servizi. Sono nella fase di sviluppo di un modello (struttura di classe che si identifica con il contesto del dominio) che aiuta a unificare i campi per i dati che vengono inviati a diversi fornitori di servizi.
Il problema che sto cercando di risolvere è scegliere se consolidare i campi di diversi fornitori di servizi per creare un modello completamente generico o avere un modello con campi comuni accanto a campi specifici del provider.
Ad esempio: ho un'API per noleggio auto che cerca di interfacciarsi con più fornitori. Ogni venditore ha un'API che mi consente di cercare auto in un'area con-in una categoria di auto. Ma ogni vendor-api ha le proprie capacità uniche che li separano dalla concorrenza.
Quando partecipo all'integrazione con diversi fornitori, vorrei che la mia API eseguisse solo la ricerca delle funzioni di base, per la quale sono in grado di identificare i campi richiesti per il modello comune. Ma mentre la mia API si evolve, voglio esporre i parametri di ricerca unici del venditore attraverso la mia API. Quando sono in fase di espansione delle funzionalità, separo i campi ad esse correlati in classi diverse o li compongo in modelli esistenti oppure li aggiungo al modello comune e interpreto campi univoci in base al contesto disponibile dai dati.
Approccio 1:
CarReservation{
String userName;
String id;
// in millis
long startDate;
long endDate;
CarCategory carCategory;
//--end common model
// only vendor 1 supports discounts on referrals
Referral referral;
// only vendor 2 supports delivering and pick up from home
Address homeDeliveryAddress;
...
}
Approccio 2:
CarReservation{
String userName;
String id;
// in millis
long startDate;
long endDate;
CarCategory carCategory;
//--end common model
vendor_1_name : {
// only vendor 1 supports discounts on referrals
Referral referral;
}
vendor_2_name : {
// only vendor 2 supports delivering and pick up from home
Address homeDeliveryAddress;
}
..
}
Il vantaggio dell'utilizzo di un singolo modello comune (Approach 1) è che è più pulito, ma con il passare del tempo con l'aggiunta di più fornitori con funzionalità molto specifiche, il modello si riempie di troppi campi non raggruppati. Capisco che possiamo organizzare meglio il modello con una gerarchia anche con molti campi.
Il vantaggio dell'utilizzo di classi di modelli compositi separati (Approach 2) per diversi fornitori è che ci aiuterà a raggruppare meglio i campi e consentirà di isolare le modifiche richieste nell'interpretazione dei dati. Ma il lato negativo è che espone i campi specifici del venditore.
Per favore, fammi sapere se la direzione in cui sto andando è quella giusta o se ci sono altri / molti altri approcci che dovrei considerare che potrebbero aiutarti ad aggiungere più funzionalità all'API. Fammi sapere se hai bisogno di ulteriori dettagli / informazioni relative alla domanda.
PS: il modello di esempio (CarReservation) che ho menzionato nell'esempio è qualcosa a cui non ho pensato troppo. In realtà sto modellando in un dominio diverso, dettagli di cui non posso rivelare. :)