Pregunta

Mi aplicación c ++ SOA tiene un concepto de " sesión " Se utiliza el intercambio de datos entre servicios. En el ejemplo, se utiliza para verificar la legalidad de algunas operaciones del servicio A antes de ejecutar la sesión B, que realiza cambios de reversión o confirmación. Lo que sea.

Tengo 2 tipos de modos de sesión: normal y qué pasa si. Yendo más lejos, tengo una sesión diferente, sesión por legalidad, sesión por asignación, sesión por confirmación, etc. Este es un problema principal. La sesión de legalidad puede ser "if-if" o real, etc.

¿Cómo arreglar eso y evitar la duplicación de código?

Puedo crear una interfaz ISessionFactory y hacer que WhatIfFactory y RealFactory lo implementen. Entonces podría hacer una ILegalitySession y hacer que WhatIfLegalitySession y RealLegalitySession lo implementen. Entonces mis fábricas devolverían los objetos apropiados.

Tiene 2 problemas principales. ¿Qué pasa si vendrá el nuevo modo? ¡Tendré que implementar una nueva fábrica y nuevas clases para todas las sesiones! ¿Qué pasa si viene un nuevo tipo de sesión? Tengo que cambiar ambas fábricas ...

Quizás renuncie a 2 jerarquías y tenga lo que en las sesiones " decorate " sesión real? ¿Cómo puedo localizar el cambio?

¿Fue útil?

Solución

Intenta implementar tu WhatIf con decoradores. O extraiga algunas partes específicas de 'qué pasaría si' al tipo de estrategia.

Otra opción es usar el patrón de estado. Estado 'WhatIf' y estado 'Real'.

Otros consejos

Creo que el patrón de decoración tiene sentido aquí. También puede consultar el patrón de estrategia y su primo de tiempo de compilación, diseño basado en políticas . Es difícil decir cuál es el mejor sin más información. Los decoradores son excelentes para agregar un comportamiento adicional, los otros dos para cambiar el comportamiento existente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top