La mayoría de las cosas que haces en la escuela son lo suficientemente simples como para que nunca haya más de una forma de desollar a un gato, pero al mismo tiempo, no quieres desollar a un perro por accidente.
Diría que el patrón de estrategia y / o el patrón de estrategia combinados con el patrón de comando.
La estrategia y los patrones de comando te permiten delegar la decisión sobre cómo desollar al gato, dándote el mayor tiempo posible en tiempo de ejecución. La necesidad de retrasar casi nunca está presente en las aplicaciones escolares.
- ¿Qué parte de una empresa de tecnología nunca externalizarías? Si tuviera que externalizar uno, ¿qué parte / equipo elegiría?
- ¿Por qué deberíamos escribir un plan de prueba para pruebas de software?
- ¿Qué quiere decir Alan Kay con 'negociar significado' entre 2 servidores de comunicación? (oponiéndose explícitamente al concepto de API)
- ¿Qué tipo de hardware pueden solicitar los ingenieros de software de Microsoft para usar en el trabajo?
- ¿Qué implica exactamente un rol de ingeniería de software?
Tomemos un ejemplo simple ……
Digamos que quiero hacer una biblioteca para hacer juegos. Una de las cuestiones que necesito manejar es tomar turnos, asegurándome de que se haga en el orden correcto. Mi estrategia básica podría ser la siguiente:
playGame (juego, jugadores)
{
while (! game.isDone ())
para cada jugador
if (platyer.canMove ())
player.doTurn (game.getBoard ());
}
Esto es agradable y fácil de depurar y una vez que lo haga bien funcionará para casi cualquier juego basado en turnos, solo tengo que definir game.isDone (), game.getBoard (), player.canMove () y player.doTurn () más donde para cada juego que hago. Es una solución completa que se puede probar unitariamente contra un juego simulado y un jugador. Di algo como:
mockGame {
isDone () {si no se mueve primero, devuelve falso; de lo contrario, devuelve verdadero}
getBoard () {return null}
}
mockPlayer (nombre) {
canMove () {return true;}
doTurn (Tablero) {imprimir nombre + “se está moviendo”;}
}
Ahora para probar el código solo necesitamos hacer lo siguiente:
players = {new MockPlayer (“bob”), new MockPlatyer (“salley”)};
juego = nuevo MockGame ();
playGame (juego, jugadores);
Deberíamos obtener el siguiente resultado:
Bob se está moviendo
Sally se está moviendo
Ahora tenemos un motor de juego genérico 100% comprobable por unidad (uno tonto, pero sigue siendo un motor genérico y más que adecuado para probar).