Un grupo de amigos y yo hemos estado trabajando en un proyecto durante un tiempo, y queríamos inventar una buena manera de representar un escenario específico para nuestro producto. Básicamente, estamos trabajando en un juego de infierno de balas al estilo Touhou , y queríamos crear un sistema donde pudiéramos representar fácilmente cualquier posible comportamiento de bala que pudiéramos soñar.
Entonces eso es exactamente lo que hicimos; Hicimos una arquitectura realmente elegante que nos permitió separar el comportamiento de una viñeta en diferentes componentes que podrían adjuntarse a instancias de viñeta a voluntad, como el sistema de componentes de Unity . Funcionó bien, fue fácilmente extensible, flexible y cubrió todas nuestras bases, pero hubo un pequeño problema.
Nuestra aplicación también implica una gran cantidad de generación de procedimientos, es decir, generamos procesalmente los comportamientos de las viñetas. ¿Por qué es esto un problema? Bueno, nuestra solución OOP para representar el comportamiento de bala, aunque elegante, es un poco complicado de trabajar sin un humano. Los humanos son lo suficientemente inteligentes como para pensar en soluciones a problemas que sean lógicos e inteligentes. Los algoritmos de generación de procedimientos aún no son tan inteligentes, y nos ha resultado difícil implementar una IA que utilice nuestra arquitectura OOP a su máximo potencial. Es cierto que esa es una falla de la arquitectura es que no es intuitiva en todas las situaciones.
Entonces, para remediar este problema, básicamente introdujimos todos los comportamientos ofrecidos por los diferentes componentes en la clase de viñetas, de modo que todo lo que pudiéramos imaginar se ofrezca directamente en cada instancia de viñeta en lugar de en otras instancias de componentes asociadas. Esto hace que nuestros algoritmos de generación de procedimientos sean un poco más fáciles de trabajar, pero ahora nuestra clase de bala es un gran objeto divino . Es fácilmente la clase más grande en el programa hasta ahora con más de cinco veces más código que cualquier otra cosa. Es un poco difícil de mantener también.
¿Está bien que una de nuestras clases se haya convertido en un objeto divino, solo para que sea más fácil trabajar con otro problema? En general, ¿está bien tener olores de código en su código si admite una solución más fácil a un problema diferente?