Renovación del sistema: aplicación práctica del modelo de diseño de cadena de responsabilidad (explosión, el período de desarrollo se redujo de 45 días a 1 día)

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

◦En primer lugar, a nivel empresarial, casi recorrerá todo el proceso, ya sea evaluación, desarrollo, pruebas, etc., enfrentará el problema de una enorme carga de trabajo.
◦Una vez más, desde el nivel del sistema, el estado actual de esta parte del código también es muy hostil, lo que se refleja principalmente en:
▪Las reglas comerciales centrales de coincidencia de particiones son consistentes, pero el código está escrito de manera diferente y disperso, lo que dificulta su lectura y mantenimiento, y también conlleva el riesgo de perder escenarios.
▪La función de coincidencia de partición actualmente está escrita por cada instancia y acoplada en cada escenario de uso. Una vez que las reglas cambian, el costo de la modificación es muy alto.

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

1. Hacer una evaluación exhaustiva a nivel de negocio: reflejada en el diseño detallado del desarrollo (como estoy muy familiarizado con las reglas de negocio, esta es mi ventaja jaja), como clasificación de escenas, modificación del plan, e incluso en El diseño El esquema de lógica de modificación y la ubicación del código de funciones específicas (clics en botones, activadores de presionar Intro después de ingresar en el cuadro de entrada, etc.) se han profundizado en los detalles, de modo que todos los desarrolladores participantes puedan usarlo como una guía para una rápida desarrollo, y los evaluadores pueden usarlo para Esto sirve como guía para escribir casos de uso, y el personal de producto lo usa como diccionario para profundizar su propia comprensión de este negocio, etc. ¿No suena increíble? Jajaja, es un poco fanfarronear aquí. Este artículo no se centrará en eso. Sigamos leyendo lentamente.
2. Este es nuestro punto culminante a nivel del sistema, se refleja principalmente en el código. Después de todo, no importa lo bien que lo digas, si no puedes implementar el código y ver el efecto, todo es en vano. Estamos en una posición. Está bien, no hay muchas tonterías. Sigue viendo mi actuación jaja.
▪En primer lugar , los módulos principales que coinciden con las particiones se unifican y solo se retiene una instancia en el sistema para proporcionar servicios. Esto no sólo puede resolver el problema de los altos costos de mantenimiento del código disperso, sino también evitar el riesgo de que falten escenarios.

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.

▪Reutilice las estructuras de datos existentes, agregue tipos de partición y ajuste los servicios y SQL correspondientes (este no es el enfoque de este artículo, por lo que no entraré en detalles) y admita la expansión de las reglas de partición en función de la compatibilidad con lógica de producción existente.
▪Ajustar la estructura del código de las reglas de coincidencia de particiones según la idea de patrones de diseño: adoptar el patrón de cadena de responsabilidad (aquí está el enfoque de este artículo)

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:

◦Solicitudes y procesamiento separados (sin acoplamiento con operaciones comerciales, no le importa de dónde proviene la solicitud, solo concéntrese en hacer coincidir las reglas de partición)
◦Se mejoró la flexibilidad y escalabilidad del sistema (si hay nuevas reglas, solo necesita agregar nodos)

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.

◦El plazo de construcción para distribución directa es de 2 días.
◦El período de construcción de la primera junta de zonificación es de solo 1 día.

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.

Decidí renunciar al software industrial de código abierto. Eventos importantes: se lanzó OGG 1.0, Huawei contribuyó con todo el código fuente y se lanzó oficialmente Ubuntu 24.04. El equipo de la Fundación Google Python fue despedido por la "montaña de código de mierda" . ". Se lanzó oficialmente Fedora Linux 40. Una conocida compañía de juegos lanzó Nuevas regulaciones: los obsequios de boda de los empleados no deben exceder los 100.000 yuanes. China Unicom lanza la primera versión china Llama3 8B del mundo del modelo de código abierto. Pinduoduo es sentenciado a compensar 5 millones de yuanes por competencia desleal. Método de entrada en la nube nacional: solo Huawei no tiene problemas de seguridad para cargar datos en la nube.
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4090830/blog/11059494
Recomendado
Clasificación