¿Cuáles son los patrones de diseño más utilizados en el código de producción sobre los que los recién graduados no tienen idea?

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.

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).

Patrón de visitante

Suponga que el triángulo y el círculo, en el diagrama # 1, representan dos entidades separadas que debe procesar en su programa. Tienes soluciones individuales para ambos.

Puede procesar fácilmente los datos que le llegan secuencialmente como se muestra en el diagrama # 2.

Pero, ¿cómo procesará los datos que le lleguen de manera similar al diagrama # 3? ¿Cuántas condiciones, si no, escribirás para desenterrar la estructura interna? ¿Qué pasaría si tuviera pocos triángulos y círculos uno dentro de otro sin un patrón específico?

El patrón del visitante viene al rescate.

El escenario anterior ocurre en la codificación cuando está procesando un objeto que puede repetir su estructura general dentro de sí mismo, al igual que los fractales.

Digamos, por ejemplo, que está escribiendo código para desarrollar su propio RDBMS. Desea procesar consultas SQL disparadas a su base de datos. Todo parece ser fácil a primera vista porque lo difícil que puede ser procesar una declaración SQL como:

SELECCIONE a.foo,
un bar
DE my_table como un
DONDE a.google = 1;

Puede dividir fácilmente la cadena en la cláusula SELECT, FROM y WHERE utilizando la manipulación básica de cadenas. Después de eso, puede extraer los nombres de columna, el nombre de la (s) tabla (s) y las restricciones aplicables en la (s) tabla (s) utilizando esas cláusulas respectivamente.

¡Sostén tus caballos Neo!

¿Cómo tratará su RDBMS ficticio con una consulta como esta?

SELECCIONE a.foo,
un bar,
(SELECCIONE un token
DE g_table como g
DONDE g.prev_log = ‘t’ Y g.foo = a.foo) tkn
DE my_table como un
DONDE a.google = 1;

Cuántos códigos anidados if-else bloques que escribirá si hay una subconsulta en la cláusula WHERE? ¿Entendiste mi punto!

En estas situaciones, el patrón de visitante es útil. Escribe el código solo una vez para cada una de las cláusulas como SELECCIONAR, DONDE, AGRUPAR POR, ORDENAR POR INDEPENDIENTE y todas caen mágicamente en su lugar, gracias al patrón de visitante.

La lógica cambia en función del tipo de objeto que se procesa o visita. Por eso el nombre, patrón de visitante.

Para más detalles técnicos consulte:

Patrón de visitante – Wikipedia

PD : No olvide pasar un objeto de búfer al constructor de su clase Visitor para almacenar sus resultados intermedios.

El más común es el modulador.

No sé cuál es el más utilizado o profeso saber qué saben o no los graduados, pero apostaría a que el bloqueo de doble verificación estaría en la lista junto con los patrones de integración empresarial.

More Interesting

Me ofrecen dos trabajos, uno con compañeros de trabajo de mi edad y el otro es un área en la que estoy realmente interesado, ¿qué oferta debo aceptar?

¿Puedo convertirme en ingeniero de software aunque no tenga un coeficiente intelectual alto?

¿Qué es el modelo de proceso de software?

¿Qué profesores o estudiantes están haciendo las cosas más emocionantes en aprendizaje automático e ingeniería de software en CMU?

¿Cómo creo un programa que determina la relación de dos temas usando el Árbol de categorías de Wikipedia?

¿Existe una herramienta UML mejor que la estrella UML?

¿Cuál es un escenario en el que ha utilizado un patrón de fábrica en el desarrollo de aplicaciones de software?

¿Cómo debo asignar * equidad * entre el front y el back end?

¿Por qué hay una mayor demanda de software en países como el Reino Unido y los Estados Unidos que en India?

¿Cuáles son algunas patentes interesantes presentadas por Google?

¿Cómo se pueden encontrar trabajos de software a tiempo parcial en Hyderabad (preferiblemente nuevas empresas)?

¿Necesito un doctorado en sistemas distribuidos, aprendizaje automático, bases de datos o especialización similar para llegar a L7 + en Google / FB / Amazon y ganar 1 mill + / año?

¿Cuál es el futuro de las pruebas de selinio como una opción de carrera? ¿Es mejor unirse como probador?

¿Qué tan rápido será la computadora en 10 años?

Estoy frustrado de ser un probador de software durante 2.7 años y quiero pasar al desarrollo, ¿cómo debo planificar y proceder?