👉 Conoce más del CURSO PRÁCTICO DE PATRONES DE DISEÑO: manuelzapata.co/curso-pdd
@oh-vito Жыл бұрын
Excelente ejemplo para entender el patrón strategy.
@ManuelZapata Жыл бұрын
Gracias!
@ElBarbaroDev Жыл бұрын
Excelente aporte. Gracias.
@ManuelZapata Жыл бұрын
Gracias Carlos!
@luisespinoza90934 ай бұрын
Tengo una duda y en un escenario donde dependiendo ciertos factores tienes que usar el algoritmo de encriptación AES y CEASAR, se usaría de todas maneras una condicional en la clase StrategyClient? al final se caeria en lo mismo que se trata de evitar no?
@luisvalero66654 ай бұрын
tengo la misma duda
@arosorio Жыл бұрын
Hola Manuel, tengo un caso en una empresa de logistica y si bien sé que esto no es un consultaria me gustaría tener tu punto de vista a problematicas reales de negocio. Esta empresa tiene n clientes y cada cliente usualmente envia sus ordenes de entrega en archivos (txt, xlsx o XML), en esencia cada cliente envia mas o menos la información requerida para crear una orden estandar, sin embargo como ya supondras, por cada cliente cambia el formato del archivo, la estructura de los datos y lo mas importante los codigos usados, por ejemplo un cliente puede enviar nombres de ciudades y otro enviar sus propios codigos de ciudades en cada caso los debo convertir a la codificación usada por la empresa logistica. Deseo implementar el uso del patron estrategia, ya he implementado las estrategias concretas e incluso cada una de ellas puede usar otras estrategias por ejemplo para leer el contenido de un archivo y devolverlo en una estructura tabular (para archivos txt o xlsx) o un Documento (XML). Uso SpringBoot y java 8+. Lo que siempre he querido mejorar ha sido: 1) Hacer uso de lo que has explicado del Contexto, En mi caso tengo un servicio que periodicamente recorre una estructura de directorios, cada directorio me dice a que cliente pertenece el archivo y de acuerdo con eso pues llamo un metodo de la estrategia concreta esto es un swicht(codigoCliente) .... case CLIENTE_TUBOS: servicioClienteTubo.procesar(rutaArchivo)... 2) Esto es un programa que lleva años funcionando pero me veo tentado a explorar el uso de EIP (www.enterpriseintegrationpatterns.com/), me han recomendado que pase todo eso a unas ETL como SQL Server Integration Services que aunque se usarlo, lo cierto es que con Java puedo reutilizar mucho codigo y me es mas facil gestionar errores y reiniciar las tareas desde cierto punto. 3) Tambien me ha tentado la idea de poder ir generando jars con ls implementaciones de las estrategias para cada cliente, por la aplicación de administración configurar a cada cliente la implementacion concreta que debe usar (Como cuando en herramientas como DBeaver o similares le indicamos la libreria que usaremos para la conexón a ls base de datos). Sucede que cada cliente puede tener implementaciones concrertas no solo para el procesamiento de diferntes tipos de ordenes (entradas de mercancia a bodega, despachos, traslados, destruccion de mercancia vencida,...) pero tambien tienen implementaciones diferentes para liquidar los servicios de almacenamiento o de transportes (entregas y recogidas), la idea es que la entrada o salida de un cliente requiera la menor modificacion del programa 5) En mi caso uso una BD SQL y un reto que tengo es como cumplo los requerimeintos especiales de información de cada cliente, esto es algunos clientes pueden requerir datos muy particulares de sus entregas por ejemplo hay un cliente que nos pidio que cada producto en una entrega viniese con una relación de unos codigos documentos sanitarios que da el gobierno o que cada electrodomestico venga con un serial o un dato de su importación o un dato tecnico por ejemplo un numero de 1 a 5 que sea la calidad de esa instancia de producto. Estos son datos que solo usará una estrategia concreta pero si lo meto en las tablas estandares de alguna manera contamino mi modelo estandar con cosas particulares de cada cliente, si creo una tabla tipo nombreatributo-valor asociada a las entidades que tengan este requerimiento me funciona muy bien pero no me gusta dos cosas a) el valor lo almaceno como texto y me toca controlar que alli se meta un valor del tipo valido y b) para el tema de algunos reportes en linea que me piden, me toca hacer una operacion PIVOT de estos atributos, lo cual ademas de crearme una dependecia con el motor de BD a veces esto puede generarme problema de desempeños... la opción NoSQL entiendo sería ideal en este caso... pero la empresa no se quiere meter con este tipo de base de datos. Tengo mas preguntas... pero no quiero pasar la raya entre plantear un tema interesante para aprender y el descaro.
@sparrowfunction8915 Жыл бұрын
Buenas Manuel, antes de nada agradecerte toda la información que compartes en tú canal. Quería preguntarte, si podría realizarse esa inicialización de propiedades en el constructor en vez del método adicional init. ¿Lo has puesto en ese método para "forzar" la implementación en el caso que sea necesaria?
@manuelzapatacastillo561 Жыл бұрын
Buenas tardes Hijo, interesante contenido
@megadeath15 Жыл бұрын
Muy buenos videos
@ManuelZapata Жыл бұрын
Gracias!
@soran2290 Жыл бұрын
Es como el patrón repository?
@ManuelZapata Жыл бұрын
Realmente no. Tienen una estructura de clases similar, pero la intención de cada patrón, así como los métodos que se definen en cada uno, son muy diferentes.
@user-nl4tn3zq8i Жыл бұрын
Al momento de crear las estrategias y los contextos; Se puede usar el patron Factory?
@elberthagreda4467 Жыл бұрын
Buen video, recomendarias el uso de maquinas de estado para la implementación de este patron? Saludos!!
@ManuelZapata Жыл бұрын
Si necesito estados, probablemente me iría por un patrón de State, y no Strategy.
@germanjesus2147 күн бұрын
que IDE usas?
@ManuelZapata3 күн бұрын
Por estos días, Cursor.
@wilfredodice7972 Жыл бұрын
Manuel saludos excelente video. Una duda ¿realmente es necesario tener un constructor en la clase StrategyContext para recibir la clase concreta? Si queremos asegurarnos de que se nos llame correctamente, bastaría con agregar un assert en el método setStrategy. Ademas si lo hacemos a través del constructor, estaríamos estableciendo una relación de composición permanente, lo cual no creo que sea deseado. En cambio, al utilizar el método setStrategy, tendríamos una relación de asociación de uso, que sería lo ideal ya que es dinámica y momentánea. ¿Estoy equivocado?
@ManuelZapata Жыл бұрын
Aquí es donde viene el poder de ajustar el patrón a tus necesidades. Si consideras que es mejor pasar la dependencia con un método set, perfecto!