DesignPatterns: ¿Cuál es el más apropiado a utilizar para una interfaz de usuario estilo asistente?

StackOverflow https://stackoverflow.com/questions/762008

Pregunta

Me estoy poniendo en práctica una interfaz de usuario estilo asistente. A medida que un usuario pasa por el asistente, hacer clic en siguiente, dependiendo de las decisiones que han elegido en cada pantalla, el usuario tendrá que pasar por un cierto conjunto de pantallas del asistente.

Esto se está construyendo en ASP.NET MVC. Me pregunto qué patrón de diseño sería el más adecuado para implementar la lógica de la secuencia de pasos que se encuentran en el asistente. Una vez más, tienen varias rutas a través del asistente en función de decisiones que toman.

¿Puedo utilizar una lista enlazada? El " Diseño Comando Patrón"? ¿Qué recomienda usted?

Para decirlo de otra manera: ¿Dónde / Cómo hacer que abstracta / encapsular la lógica de determinar cuál es el siguiente paso en el asistente basado en lo que el usuario ha elegido en un determinado paso del asistente

?
¿Fue útil?

Solución

  

Para decirlo de otra manera: ¿Dónde / Cómo hacer que abstracta / encapsular la lógica de determinar cuál es el siguiente paso en el asistente basado en lo que el usuario ha elegido en un determinado paso del asistente

?

Una forma de hacerlo sería para modelar clases, Step, y el producto. Tal vez algo como esto?

public class Wizard
{
  public Step forward() {//...}

  public Step backward() {//...}

  public Step current() {//...}

  public Product getProduct() {//...}
}

public class Step
{
  public String name() {//...}

  public void commit(Product product) {//...}

  public void rollback(Product product) {//...}
}

public class Product
{
  //...
}

El propósito del Asistente es construir un producto (coches, ordenador, de vacaciones, etc.).

En este escenario, es asistente que decide el siguiente paso - tal vez en función del estado del producto que el mago está construyendo. Asistente estaría actuando como un Constructor bajo el control de la interfaz de usuario, que sería el director y Asistente dirá cuándo y en qué dirección para hacer una transición. Todo depende de Asistente para decidir cuál es el siguiente paso es en realidad. Múltiples puntos de ramificación podría ser apoyado, pero que la aplicación se esconde en el interior de asistente.

paso sería ser una instancia de los href="http://en.wikipedia.org/wiki/Command_pattern" patrón Comando con deshacer / rehacer capacidad.

Otros consejos

El " Estado " patrón podría tener sentido, si desea que el usuario pueda desplazarse hacia delante y hacia atrás a través del asistente.

Un modelo de flujo de trabajo también podría tener sentido. Tal vez investigar el uso de Windows Workflow Foundation.

Me gusta que sea sencillo. Puedo establecer un valor en el objeto que estoy construyendo con un número de paso, por lo que si estoy construyendo hasta una póliza de seguro que tendría una propiedad en la política que indica qué paso se encuentra. Entonces tengo un único método que es el router y mira a la política y determina dónde enviarlo al lado, se puede construir la lógica adicional en el router para saltarse los pasos o puede poner la lógica en cada etapa del procedimiento y redirigir nuevamente al router método.

Estoy de acuerdo con Beau.

En realidad, si se necesita un complejo conjunto de reglas para la lógica de navegación, entonces usted tiene un asistente GUI-sabia, pero no un mago bajo el capó.

Si lo que están tratando de construir es realmente un mago, cada pantalla debe fluir en un máximo de 2-3 pantallas diferentes (OMI). Eso podría almacenarse fácilmente en una estructura muy simple (base de datos, archivo de configuración estática).

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