Analizza quali proprietà lavorano insieme e crea una classe di ciascuno di questi gruppi. Possono raggrupparsi attorno ai sistemi naturali come elettrico, motore, trasmissione; e gruppi nozionali come performance, identità, opzioni.
Mentre lavori questi gruppi cercano proprietà ridondanti. Queste singole proprietà potrebbero essere DRYed fino a diventare una classe che viene utilizzata per inizializzare minimamente qualsiasi auto. Altre classi di aspetto dell'auto avranno un riferimento a questo se necessario.
Dato un auto minimamente inizializzato, puoi caricare pigro gli altri aspetti della vettura, se necessario.
Mentre tutto quanto sopra sembra solo composizione, i requisiti completi e l'analisi del progetto produrranno complementari ereditarietà, composizione, sovraccarico del costruttore e modelli come fabbrica, costruttore o visitatore per consentire una costruzione flessibile e garantire l'integrità degli oggetti.
Il codice cliente non dovrebbe impostare le singole proprietà dell'oggetto-aspetto dell'automobile. Il cliente avrebbe bisogno di sapere tutto sulle funzionalità interne della classe dell'auto per farlo nel modo giusto. Quindi, oltre a un factory per l'inizializzazione, potresti avere classi builder che incapsulano / controllano l'iniezione di ulteriori oggetti aspetto auto, i parametri del costruttore che garantiscono che l'oggetto auto sia in uno stato valido.
Le classi e le fabbriche dei costruttori di cui sopra possono funzionare con classificazioni di veicoli di grandi dimensioni come auto sportive, camion, berline di lusso, auto volanti, ecc.
Infine, queste classi di aspetto dell'auto non dovrebbero essere solo stupide cose tipo DTO: tutte lo stato e nessuna funzione. Trovo che anche cose minime come l'override di ToString, Equals, forse implementino IComparable, rendano la composizione migliore ei livelli di composizione tendano a rimanere più semplici.