Así que estaba pensando en cuán monolíticas mis clases se vuelven mucho tiempo. Por ejemplo, en el método de la Character
clase Jump
, uno puede tener una referencia a un objeto de efecto de sonido y reproducirlo. Eso en sí mismo está bien, pero cuando se tiene en cuenta la física, la animación, la colisión, etc., el método Jump se vuelve enorme y la Character
clase tiene muchas dependencias para muchas cosas diferentes. Aún así, esto puede estar bien. Sin embargo, ¿qué pasa si ya no queremos que suene un sonido cuando el personaje salta? Ahora, tenemos que encontrar esa línea específica de código en la confusión del Jump
código y comentarlo o lo que sea.
Entonces ... estaba pensando ...
¿Qué pasa si, en cambio, hubo algún tipo de AudioSystem
clase y todo lo que hizo fue suscribirse a eventos aleatorios que le interesan en otras clases? Por ejemplo, la Character
clase puede tener un Jumped
evento (también estático, supongo) que se genera dentro de la Character
clase en el método. Entonces, la Character
clase no sabría nada sobre el pequeño efecto de sonido que se reproduce cuando el personaje salta. El AudioSystem
no sería más que una clase enorme que el programador podría retirarse a conectar efectos de sonido con ciertos acontecimientos que suceden en el juego a través del uso de eventos estáticos. Entonces, si se hacía demasiado grande que podría ser separado en las subclases como EffectsAudioSystem
, BackgroundAudioSystem
, AmbientAudioSystem
, etcétera.
Luego, en las opciones para el juego, uno podría tener una casilla de verificación para habilitar o deshabilitar este tipo de sonidos y todo lo que tendría que hacer es deshabilitar ese sistema con una bandera booleana simple y única. Esta idea de los sistemas también podría extenderse a cosas como la física, las animaciones, etc., hasta el punto en que la mayoría de las respuestas del juego resultantes de las acciones de los jugadores se conectan a través de estos sistemas elaborados y desacoplados.
Bien, entonces mi pregunta puede ser un poco vaga, pero ¿cómo suena este tipo de cosas? Realmente nunca he oído hablar mucho sobre este tipo de sistema. Todo esto está en mi cabeza en este momento sin ninguna codificación realizada hasta ahora, por lo que tal vez sea uno de esos tipos de acuerdos "buenos en teoría pero no en la práctica". ¿Funcionaría este tipo de sistema con un juego más grande?