Un gruppo di amici e io abbiamo lavorato su un progetto per un po 'di tempo, e volevamo inventare un bel modo OOP di rappresentare uno scenario specifico per il nostro prodotto. Fondamentalmente, stiamo lavorando a un gioco infernale in stile Touhou e volevamo creare un sistema in cui potessimo rappresentare facilmente qualsiasi possibile comportamento di proiettile che potessimo immaginare.
Quindi è esattamente quello che abbiamo fatto; abbiamo realizzato un'architettura davvero elegante che ci ha permesso di suddividere il comportamento di un proiettile in diversi componenti che potevano essere collegati a istanze di proiettile a piacimento, un po 'come il sistema di componenti di Unity . Funzionava bene, era facilmente estensibile, flessibile e copriva tutte le nostre basi, ma c'era un leggero problema.
La nostra applicazione comporta anche una grande quantità di generazione procedurale, ovvero generiamo proceduralmente i comportamenti dei proiettili. Perché questo è un problema? Bene, la nostra soluzione OOP per rappresentare il comportamento dei proiettili, sebbene elegante, è un po 'complicata con cui lavorare senza un essere umano. Gli umani sono abbastanza intelligenti da pensare a soluzioni a problemi che sono sia logici che intelligenti. Gli algoritmi di generazione procedurale non sono ancora così intelligenti e abbiamo trovato difficile implementare un'intelligenza artificiale che utilizza la nostra architettura OOP al massimo delle sue potenzialità. Certo, questo è un difetto dell'architettura è che non è intuitivo in tutte le situazioni.
Quindi, per ovviare a questo problema, fondamentalmente abbiamo inserito tutti i comportamenti offerti da diversi componenti nella classe bullet, in modo che tutto ciò che potremmo mai immaginare sia offerto direttamente in ogni istanza di bullet anziché in altre istanze di componente associate. Questo rende i nostri algoritmi di generazione procedurale un po 'più facili da lavorare, ma ora la nostra classe di proiettili è un enorme oggetto divino . È facilmente la classe più grande del programma finora con più di cinque volte più codice di qualsiasi altra cosa. È anche un po 'doloroso da mantenere.
Va bene che una delle nostre classi si è trasformata in un oggetto divino, solo per facilitare il lavoro con un altro problema? In generale, va bene avere odori di codice nel tuo codice se ammette una soluzione più semplice a un problema diverso?