Un gruppo di amici e io abbiamo lavorato a un progetto per il passato e volevamo inventare un bel modo OOP di rappresentare uno scenario specifico per il nostro prodotto. Fondamentalmente, stiamo lavorando su un stile Touhou gioco infernale dei proiettili , e volevamo creare un sistema in cui poter rappresentare facilmente qualsiasi possibile comportamento del proiettile che potremmo immaginare.
Quindi questo è esattamente ciò che abbiamo fatto; abbiamo creato un'architettura davvero elegante che ci ha permesso di separare il comportamento di un proiettile in diversi componenti che potevano essere collegati alle istanze dei proiettili a volontà, un po 'come Sistema componente di Unity. Funzionava bene, era facilmente estensibile, flessibile e copriva tutte le nostre basi, ma c'era un piccolo 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, seppur elegante, è un po 'complicata con cui lavorare senza un umano. Gli esseri 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'IA che utilizzi la nostra architettura OOP al massimo potenziale. Indubbiamente, questo è un difetto dell'architettura è che non è intuitivo in tutte le situazioni.
Quindi, per rimediare a questo problema, abbiamo praticamente eliminato tutti i comportamenti offerti dai diversi componenti nella classe bullet, in modo che tutto ciò che potremmo mai immaginare sia offerto direttamente in ogni istanza di bullet rispetto a altre istanze di componenti associate. Questo rende i nostri algoritmi di generazione procedurale un po 'più facili da usare, ma ora la nostra classe bullet è un enorme oggetto dio . È facilmente la più grande classe del programma fino ad ora con più di cinque volte più codice di qualsiasi altra cosa. È anche un po 'difficile da mantenere.
Va bene che una delle nostre classi si sia trasformata in un oggetto divino, solo per facilitare il lavoro con un altro problema? In generale, è corretto avere odori di codice nel codice se ammette una soluzione più semplice a un altro problema?