Este artículo presenta los antecedentes y la experiencia del uso del patrón de diseño de cadena de responsabilidad, para que los lectores puedan profundizar su impresión sobre este patrón de diseño e incluso inspirarse para "renovar" los proyectos en los que actualmente participan y son responsables, mejorando así el "lavado de cara" del sistema Belleza”. Comparte cada detalle de tu trabajo.
1. Antecedentes
Existe un módulo de este tipo en el sistema del que soy responsable, el módulo de partición. Si miras esta palabra directamente, creo que muchas personas se sentirán confundidas o incluso malinterpretadas. De hecho, su verdadero significado es "enrutamiento". Describiremos brevemente qué es el "enrutamiento".
Creo que todos han tenido experiencia de compra en línea. Cada vez que realizamos un pedido, podemos verificar el estado de seguimiento logístico del pedido en cualquier momento y en cualquier lugar. El concepto de "enrutamiento" mencionado anteriormente se refiere al transporte del pedido desde el punto A al punto. B. La línea de ruta, por ejemplo, el pedido orden1 debe transportarse desde A al destino F. Puede ir desde A->B->D->F, o desde A->D->F. En cuanto a qué ruta debe. Se deben tomar, depende de Las rutas configuradas en el sistema y las reglas de coincidencia correspondientes se filtran.
Durante mucho tiempo, la configuración de enrutamiento y las reglas en el sistema han sido estáticas (lo llamado estático significa que se han configurado de antemano y son casi fijas). La desventaja de este método es obvia, es decir, el costo no puede ser fijo. controlarse, como se mencionó anteriormente en el ejemplo mencionado, obviamente hay oportunidades para que la ruta de transporte se reduzca o incluso se entregue directamente (las mercancías de A a F obviamente pueden llenar N camiones, pero deben transportarse de acuerdo con la ruta). establecidos en el sistema), pero están bloqueados por el sistema. Debido a las reglas de ruta fijas, solo podemos tomar más caminos, lo que aumenta el costo de las operaciones de mano de obra y el transporte.
En base a esto, un experto descubrió una oportunidad de negocio para reducir costos y aumentar la eficiencia: activar esta línea de enrutamiento y reglas, para que el sistema pueda ser más flexiblemente compatible con las situaciones anteriores y lograr la máxima utilización de recursos. Por ejemplo, si hay muchas órdenes, todas están destinadas desde A al destino F. La configuración de línea estática en el sistema es solo A->B->D->F. Sin embargo, después del monitoreo y cálculo del sistema, se encontró que el La cantidad de mercancías de A a F puede llenar dos camiones. Luego, en este momento, se genera temporalmente una nueva ruta para estos pedidos de A a F. Al mismo tiempo, las mercancías se reciben y envían en el sitio A. involucrar la coincidencia de líneas de enrutamiento es compatible con este escenario de enrutamiento temporal, por lo que el costo general se puede reducir sin cambiar los hábitos del usuario y la eficiencia del transporte al destino también se ha mejorado enormemente.
El plan propuesto por este experto fue muy bueno y fue ampliamente reconocido y elogiado por todos. Una vez establecido el proyecto, entró en una etapa de desarrollo vigoroso y tuve la suerte de que se me confiara la importante tarea de liderar el desarrollo y la ejecución. este proyecto.
Vale la pena mencionar que los cambios en el circuito de enrutamiento abarcan todo el proceso de operación real del pedido, así como algunas consultas auxiliares de extremo a extremo, informes estadísticos y otras funciones. Hay muchos escenarios involucrados, por lo que la presión aún existe. bastante alto, aunque es cierto que durante el período tomamos muchos desvíos, pero el resultado final fue bueno. Incluso más tarde, hubo varias necesidades similares de cambiar las líneas de ruta, pero en base a esta transformación, podemos afrontarlo fácilmente. Esto se discutirá más adelante en el artículo y se reflejará en el efecto.
Habiendo dicho tanto, ¿sientes que todo es una tontería? Jaja, de hecho es un poco prolijo. A continuación, echemos un vistazo a Menghui Road y reproduzcamos todo el proceso de transformación que está fragmentado pero que tiene una sensación de logro. .
2. Ideas y métodos
La partición mencionada en artículos posteriores es el significado de reglas coincidentes para el enrutamiento.
Primero, veamos un diagrama esquemático simple del proceso de operación práctica.
Las reglas de coincidencia de particiones estarán involucradas en el proceso de operación real de cada sitio. Al mismo tiempo, las reglas de coincidencia de enrutamiento también estarán involucradas en la función de consulta o función de informe de algunas operaciones auxiliares, por lo que una vez que sea necesario cambiar las reglas de coincidencia de particiones, entonces enfrentarás los siguientes puntos débiles
Con base en los puntos débiles anteriores, he decidido reestructurar y rectificar este módulo. En primer lugar, mejoraré a través de este desafío y, en segundo lugar, también allanaré el camino para la posibilidad de cambiar esta regla nuevamente en el futuro. ¿Debo hacer específicamente cómo resolver los puntos débiles mencionados anteriormente? Esto es lo que hice
Al ver esto, algunas personas pueden preguntarse, ¿traerá esto otro problema? Aunque las escenas no se perderán, una vez que se realice un cambio de código, todas las escenas tendrán efecto, pero ¿se cambiarán las escenas originales de algunas escenas? Creo que los estudiantes aquí son muy cuidadosos. Si el cierre es forzado, surgirá este nuevo problema. Por lo tanto, el cierre unificado debe admitir ganchos de expansión y reserva para respaldar el procesamiento diferenciado de cada escena. Esto es bastante abstracto: por ejemplo, la regla del escenario general es que todos los pedidos se transportan de acuerdo con las reglas de zonificación de la configuración establecida del sistema, pero ahora algunos comerciantes han abierto algunos servicios para entregar rápidamente al destino, luego para estos. pedidos de comerciantes Ya no es posible utilizar las reglas generales existentes para la comparación de particiones y el transporte. Es necesario realizar la comparación de particiones de acuerdo con las nuevas reglas para lograr el propósito de un transporte rápido. Ésta es la diferencia interior.
Entonces, ¿qué es exactamente el modelo de cadena de responsabilidad?
La definición dada por Daniel: dar a múltiples objetos la oportunidad de procesar solicitudes, evitando así la relación de acoplamiento entre el remitente y el receptor de la solicitud. Estos objetos están conectados en una cadena y la solicitud se pasa a lo largo de la cadena hasta que un objeto la maneja.
Hablemos de cómo lo aplico en función del negocio real del sistema existente: ya he introducido en el trasfondo del capítulo inicial que las reglas de coincidencia de particiones existentes son coincidencias de particiones estáticas (como un determinado negocio punto a punto, un determinado punto comercial a un área de rango) Espere, no entraré en detalles comerciales específicos, solo sepa que hay muchas reglas coincidentes aquí). Ahora necesitamos agregar una nueva regla para admitir la dinámica (también es una variedad). de coincidencia, por lo que no entraré en detalles). Aquí defino cada regla de partición como un tipo de partición y cada tipo de partición como un nodo de partición entreteje estos nodos en una cadena, de modo que cada solicitud pueda encontrar una línea coincidente. esta cadena.
Dado que los detalles comerciales son relativamente confidenciales, no se divulgarán en detalle en el artículo, lo que no afectará la comprensión de la aplicación de patrones de diseño clave.
Combinando la definición y el análisis anterior, ¿es la situación real adecuada para utilizar el patrón de diseño de la cadena de responsabilidad? Creo que siempre que los puntos débiles anteriores puedan resolverse y los beneficios generales superen las desventajas, entonces es aplicable. Primero, las ventajas de utilizar este modelo para transformar son las siguientes:
Por supuesto, este modelo también tiene ciertas desventajas: cuando la cadena de responsabilidad es relativamente larga, dado que cada solicitud atravesará toda la cadena, puede haber problemas de rendimiento. Al mismo tiempo, la depuración puede ser más complicada para los estudiantes que no entienden. el negocio.
En general, la ventaja es que resuelve nuestros puntos débiles actuales y facilita la expansión posterior, mientras que la parte de rendimiento de las desventajas se puede omitir combinando las funciones de enlace reservadas en el modo de plantilla (si la solicitud actual no es adecuada para el nodo de partición actual reglas) para minimizar el impacto de los problemas de rendimiento y, al mismo tiempo, también es necesario que los desarrolladores comprendan el negocio. Así pues, parece que en general las ventajas superan a las desventajas.
Habiendo dicho todo esto, primero echemos un vistazo a un diagrama comparativo simple del módulo de partición antes y después de la transformación.
Aunque el diagrama es muy simple, el significado de la comparación sigue siendo obvio. Antes de la transformación: la coincidencia de particiones y el procesamiento comercial están acoplados después de la transformación: la coincidencia de particiones es una cadena y no hay procesamiento de lógica comercial en ella; También se admiten extensiones liberadas del acoplamiento. Algunas personas pueden sentirse confundidas después de ver esto: ¿No dice lo anterior que solo se agregó una regla de coincidencia dinámica? ¿Por qué hay tantos nodos en la cadena y todavía hay dos cadenas? Permítanme explicarlo un poco aquí: las dos cadenas actuales han experimentado muchos cambios de versión de demanda. En la actualidad, parece que la diferencia no es grande, principalmente porque los escenarios especificados por el negocio fuente que proporcionan son diferentes. Al interferir con sus respectivas operaciones, los nodos introducidos en muchos lugares de este artículo también se agregaron más adelante y siguen siendo las reglas de nodo utilizadas en el sistema hasta ahora (esto es lo que mencioné al principio del artículo: ¿Qué pasa si hay? Hay cambios de reglas más adelante. Efectivamente, todavía es tan inteligente como soy, la "profecía" se ha hecho realidad. En el efecto, les diré la importancia de apoyar la expansión aquí para acortar el período de construcción.
3. Proceso práctico
Creo que muchos lectores encontrarán que lo anterior habla sobre el cierre unificado y la combinación con el modo de plantilla para evitar el impacto en el rendimiento en la mayor medida posible, por lo que su cadena de responsabilidad no puede ser respaldada por un solo modo de diseño.
Sí, tienes razón, Smart. Es cierto que usar un solo patrón de diseño de cadena de responsabilidad está lejos de lograr el efecto mencionado anteriormente. Aquí combinamos los patrones de fábrica, plantilla y cadena de responsabilidad a los que está acostumbrado. Obtenga el bean de la cadena. La plantilla se usa para configurar métodos generales, llamadas entre métodos y cambios, preprocesamiento y posprocesamiento, diferenciación y otros métodos reservados para la implementación de subclases. La cadena de responsabilidad se usa para combinar varios nodos. Son algunos ejemplos simples. El nodo muestra el diagrama de clases de la siguiente manera.
Esta sección es relativamente simple, después de todo, es solo codificación. El diagrama de clases anterior es casi una aplicación práctica en el código y también es la parte central del código. En las llamadas reales, la cadena de beans se obtiene a través de la fábrica. coincidencia de particiones.
4. Reflexiones sobre el proceso de práctica y evaluación de efectos.
Los resultados después de la transformación se reflejan principalmente en la posterior expansión y mantenimiento. Como se mencionó al principio del artículo, una vez que se cambian las reglas de coincidencia de particiones, habrá dos puntos débiles. La manifestación más directa es el período de construcción. Es la primera vez que tomo este bloque Al cambiar los requisitos para las nuevas reglas de enrutamiento, el período de construcción real general es de 45 días en el lado de I + D, sin mencionar que una vez que se encuentra un ERROR, el período de prueba no está garantizado (correspondiente a los nodos dinámicos en los nodos de la figura anterior)
Pero no mucho después, se agregaron nuevamente nuevos requisitos para las reglas de coincidencia (correspondientes al nodo de uso compartido del automóvil en el nodo anterior, para requisitos similares, el período de construcción se redujo a casi la mitad y los 45 días óptimos se redujeron a 27 días). El requisito también incluye Para la transformación de otros módulos no particionados, por supuesto, la transformación de la primera versión tuvo algunos aspectos perfectos. Después de este tiempo, se optimizó de acuerdo con las necesidades de.
Los dos siguientes realmente representan lo que se llama la desaparición del período de construcción. Uno es el primer requisito de la regla de zonificación de la junta y el otro es la regla de zonificación directa en los recientes requisitos de integración de la red B.
Para ser honesto, no esperaba un efecto tan grande cuando no miré los datos. Mirando hacia atrás ahora, también me sorprende quién hubiera pensado que la aplicación de un patrón de diseño puede acortar el período de construcción. 45 días para 1 Dios, esto es increíble.
Por supuesto, también hay algunas áreas que se pueden mejorar y actualizar. En la actualidad, el ensamblaje de los nodos de la cadena de responsabilidad se especifica manualmente y se puede cambiar al ensamblaje automático (ya lo implementé en la transformación de otro escenario comercial). Aquí también se llevará a cabo una transformación sincrónica), otra es controlar el número de nodos. Si el número es demasiado grande, es posible que deba considerar una solución de compatibilidad.
Como dice el refrán, no hace falta un día para perforar una gota de agua, y no hace falta un día para congelar tres pies de hielo. Ciertamente es factible utilizar herramientas poderosas y tecnologías novedosas, pero no lo hagas. No te olvides de los pequeños cambios en el trabajo diario. En poco tiempo, es posible que no puedas ver nada, pero una vez que los cambios cuantitativos conduzcan a cambios cualitativos, creo que los resultados serán muy impresionantes.