Documentación: Describe únicamente el modelo actual y parte de la interacción con el servidor.
Test: Sobre los estados, y de integración sobre los juegos. Los test presentes son buenos, al tener nombres explicativos, ser de caja negra y responder a setup-exercise-verify-teardown.
Modelo: Me parecio bueno, con la flexibilidad que da una maquina de estados pero evitando la explosión combinatoria que resultaría de trabajar con estados globales. Hay características demasiado especificas que aparecen para soportar juegos con condiciones más complicadas, como Element::intProperty, Element::stringProperty, las condiciones en overrides de Game::doAction.
Implementación: En este punto les recomendaría agregar a sus clases un breve comentario describiendo su propósito. Muchas clases hacen cosas que no se corresponden con su nombre o propósito aparente, usualmente formateado de texto o cosas de juegos en clases del engine.
Intenten usar composición e implementación de interfaces por sobre herencia, para dejar explícitas las interacciones entre sus clases y evitar violaciones de los principios SOLID.
Documentación: Describe únicamente el modelo actual y parte de la interacción con el servidor.
Test: Sobre los estados, y de integración sobre los juegos. Los test presentes son buenos, al tener nombres explicativos, ser de caja negra y responder a setup-exercise-verify-teardown.
Modelo: Me parecio bueno, con la flexibilidad que da una maquina de estados pero evitando la explosión combinatoria que resultaría de trabajar con estados globales. Hay características demasiado especificas que aparecen para soportar juegos con condiciones más complicadas, como Element::intProperty, Element::stringProperty, las condiciones en overrides de Game::doAction.
Implementación: En este punto les recomendaría agregar a sus clases un breve comentario describiendo su propósito. Muchas clases hacen cosas que no se corresponden con su nombre o propósito aparente, usualmente formateado de texto o cosas de juegos en clases del engine. Intenten usar composición e implementación de interfaces por sobre herencia, para dejar explícitas las interacciones entre sus clases y evitar violaciones de los principios SOLID.