Sto scrivendo una libreria di classi per fungere da wrapper .NET gestito su un'API REST. Sono molto nuovo per OOP, e questo compito è un'opportunità ideale per me per imparare alcuni concetti di OOP in una situazione di vita reale che per me ha senso.
Alcune delle risorse / oggetti principali restituiti dall'API vengono restituiti con diversi livelli di dettaglio a seconda che la richiesta riguardi una singola istanza, un elenco o parte di una risposta "cerca tutte le risorse". Questo è ovviamente un buon progetto per l'API REST stesso, in modo che non vengano restituiti oggetti completi (aumentando così la dimensione della risposta e quindi il tempo necessario per rispondere) a meno che non siano necessari.
Quindi, per essere chiari:
- ... / car / 1234.json restituisce l'intero oggetto Car per 1234, tutte le sue proprietà come colore, marca, modello, anno, dimensione_motore, ecc. Chiamiamo questo completo .
- ... / cars.json restituisce un elenco di oggetti Car, ma solo con un sottoinsieme delle proprietà restituite da ... / car / 1234.json. Chiamiamo questo lite .
- ... search.json restituisce, tra le altre cose, un elenco di oggetti auto, ma con proprietà minime (solo ID, marca e modello). Chiamiamo questo lite-lite .
Voglio sapere quali sono i pro e i contro di ciascuno dei seguenti possibili design e se esiste un design migliore che non ho trattato:
- Crea una classe Car che modellino le proprietà lite-lite , quindi verifica che ciascuna delle risposte più dettagliate erediti ed estenda questa classe.
- Crea classi separate CarFull, CarLite e CarLiteLite corrispondenti a ciascuna delle risposte.
- Crea una singola classe Car che contiene proprietà (nullable?) per la risposta completa e crea costruttori per ciascuna delle risposte che la popolano nella misura del possibile (e forse include una proprietà che restituisce il tipo di risposta da cui è stata creata l'istanza).
Mi aspetto che tra le altre cose ci saranno casi d'uso per i consumatori del wrapper dove vorranno iterare attraverso gli elenchi di Cars, indipendentemente dal tipo di risposta da cui sono stati creati, in modo che i tre tipi di risposta possano contribuire allo stesso lista.
Felice di essere puntato su buone risorse per questo genere di cose, e / o persino di aver detto il nome del concetto che sto descrivendo, in modo da poter indirizzare meglio la mia ricerca.