¿Es generalmente aceptable permitir que un visitante modifique el estado del receptor, o debería ser un patrón de comando en su lugar?Patrón de comando frente a patrón de visitante
Respuesta
El propósito del patrón de visitante es permitir que se agreguen nuevas operaciones a una jerarquía de clases sin modificación a esa jerarquía. Nunca he visto a nadie sugiriendo que solo las operaciones de solo lectura sean aceptables. La única limitación es que las operaciones agregadas solo deben usar la interfaz pública de la jerarquía de clases.
No creo que pueda hacer una declaración general sobre si es bueno o malo modificar el estado de cualquier cosa. Creo que está bien modificar los estados siempre que no afecte a la lógica de visita en sí. Por ejemplo, puede escribir un visitante que visite todos los archivos en la estructura de carpetas y cambie el nombre del archivo a mayúsculas.
El ejemplo de Microsoft de un visitante que modifica el receptor es el ExpressionVisitor. El objetivo de la clase ExpressionVisitor es modificar un árbol de Expresión. Así que supongo que Microsoft al menos piensa que es aceptable.
Microsoft no siempre es la mejor guía sobre lo que está bien y lo que está mal: http://ayende.com/blog/35841/review-microsoft-n-layer-app-sample-part-xndash-architecture- para la era espacial – jason
La interpretación estándar cuando alguien dice "la autoridad X piensa que Y es aceptable" es que usted está apoyando a Y apelando a la autoridad X. cf. * argumentum ad verecundiam *. – jason
@Jason Seguro que consideraré a Microsoft como una autoridad. Estoy diciendo que aquí hay una instancia en la que esta autoridad considera que este patrón es aceptable. ¿Pero estoy diciendo que son la "mejor guía"? No . Dejo en manos del preguntador decidir si tienen razón. –
Cada patrón tiene sus propios pros, contras y casos de uso.
Puede utilizar Command
patrón para
Disociar el invocador & receptor de mando
Implementar devolución de llamada mecanismo
Implementar deshacer y rehacer funcionalidad
mantener un historial de comandos
Uso Visitor
patrón en escenarios siguientes:
- operaciones similares tienen que ser realizadas en objetos de diferentes tipos agrupados en una estructura
- Necesita ejecutar muchas operaciones distintas y no relacionadas. Se separa operación de objetos Estructura
- nuevas operaciones se tienen que añadir sin cambio en la estructura del objeto
mensajes relacionados:
- 1. ¿Alternativa al patrón de visitante?
- 2. Patrón de visitante para AST
- 3. Patrón de visitante y encapsulado
- 4. Explicación del patrón de visitante
- 5. Patrón de visitante en Scala
- 6. Patrón visitante + Abierto/Cerrado Principio
- 7. Pruebas unitarias Arquitectura de patrón de visitante
- 8. Transformaciones de árbol usando Patrón de visitante
- 9. C++: dudas sobre el patrón de visitante
- 10. ¿Por qué utilizar el patrón de visitante?
- 11. Controlador frontal frente a patrón de fachada
- 12. Implementando el patrón de comando
- 13. Patrón de visitante de Java en lugar de instanceof switch
- 14. Implementando el patrón de visitante usando las plantillas de C++
- 15. Patrón de comando: cómo pasar parámetros a un comando?
- 16. Dependencia cíclica en patrón de diseño de visitante
- 17. ¿Cómo implementar el patrón de visitante en javascript?
- 18. Cómo utilizar el patrón de visitante para sustituir "instanceof"
- 19. Preguntas sobre el patrón de comando (PHP)
- 20. Uso del patrón de visitante con genéricos en C#
- 21. Patrón de visitante en Ruby, o simplemente usa un bloque?
- 22. ¿Cómo funciona el doble despacho en el patrón de visitante?
- 23. Propósito del patrón de visitante con los ejemplos
- 24. Patrón de estrategia frente a inyección de dependencia
- 25. Bash: patrón grep de salida de comando
- 26. Patrón de depósito frente a objetos comerciales "inteligentes"
- 27. Patrón de diseño del observador frente a "Oyentes"
- 28. Patrón de comando - devuelve un valor
- 29. Patrón de comando que conduce a explosión de clase
- 30. Enumeraciones de Java - Cambie las declaraciones frente al patrón de visitante en las Enumeraciones - ¿Beneficios de rendimiento?
Hay Definitivamente los casos en que uno puede hacer La afirmación de que cambiar el estado es algo bueno o malo. Se espera que el patrón de visitante se use de tal forma que un cambio de estado sea posible e incluso probable. Mientras que con el patrón del observador, el observador no debería estar cambiando el estado. –
¿qué tal un usuario, evento para comentar, oyente castigador que prohibiría al usuario después de decir algunas palabras violentas? :-) –