Stai pensando a come organizzare tutte queste proprietà, ma questi dati dovrebbero essere disposti anche in "proprietà"?
Si dice che la maggior parte di queste proprietà sarà utilizzata solo sul lato client, quindi presumo che il server stia leggendo queste proprietà da qualche database nell'oggetto e passandole al client così com'è. Il server funge da pipe: è "consapevolezza" della struttura dei dati che le pipe devono essere limitate. Se la pipe è a conoscenza della struttura dei dati che canalizza, diventa un altro posto che dipende da quella struttura e quella dipendenza non fornisce molto valore.
Al posto delle proprietà, ti suggerisco di usare un dizionario o qualche altra struttura di dati dinamica - una che il codice che la gestisce non ha bisogno di essere consapevole della struttura effettiva che detiene. In questo modo il codice del server non ha bisogno di preoccuparsi di quante proprietà ci sono e di come è organizzata la loro gerarchia.
Ricorda che:
- Queste poche proprietà che devi utilizzare nel server dovrebbero rimanere proprietà. Possono essere proprietà concrete che si uniscono nel JSON, oppure possono essere accessorie che leggono / scrivono dal dizionario.
- Il client deve ancora utilizzare queste proprietà, quindi potrebbe essere sensato riorganizzarle per il client. Lo stesso vale per il database.
Detto questo ...
Anche se il server trasmette solo i dati, a volte si desidera convalidarli. Per quello puoi usare uno schema. Puoi usare qualcosa come JSON Schema , ma ci sono anche alcune librerie che usano le classi come schema e usano la riflessione per leggerle. Se si utilizza tale libreria, è necessario scrivere una classe con tutti questi campi come proprietà - ma la mia risposta è ancora valida! Assicurati di trattare queste classi come schemi, non come effettive classi OOP. Non si scrivono queste classi per l'incapsulamento: le si scrive come alternativa alla scrittura di uno schema JSON in JSON. Non è necessario applicare la metodologia OOP completa su di essi solo perché sono classi.