2010-06-18 13 views
7

Me preguntaba si establecer un valor predeterminado para una lista de selección se considera lógica de presentación o lógica comercial. Por ejemplo, si un requisito es que un Empleado no se puede guardar sin una Ubicación, pero el 99% de las veces la ubicación que se seleccionará es un elemento en particular, por ejemplo, Atlanta. Debido a esto, la ubicación SelectList se debe establecer de forma predeterminada en Atlanta cuando se muestre una pantalla de entrada para un nuevo empleado. ¿Debería estar incumpliendo la ubicación en el modelo o en el modelo de vista? Una cosa que me di cuenta es que las pruebas unitarias se vuelven incómodas porque en ambos casos, me vería obligado a probar en una ubicación que siempre estará presente en producción, pero no puedo crear una prueba unitaria con mis propios datos de prueba a menos que fuera "Atlanta" en el conjunto de ubicaciones que se usa en la prueba. Me gustaría mucho si tienes alguna idea sobre esto también.Establecer un valor predeterminado: ¿lógica de presentación o lógica comercial?

Respuesta

4

Al igual que en muchas de estas preguntas (subjetivas) la respuesta es: "Depende".

Si el "valor predeterminado" es un valor predeterminado de la empresa (por ejemplo, una ubicación predeterminada de una ubicación comercial o un número predeterminado de unidades en un pedido o un poco) probablemente sea un nivel empresarial. Eso parece ser correcto para su situación específica aquí.

Sin embargo, si el "valor predeterminado" de su lista es simplemente porque necesita algún valor para ser el predeterminado, y simplemente va a elegir el índice 0, o simplemente va a elegir en función de la ubicación del usuario o sistema ajustes, creo que esos serían problemas de nivel de presentación.

+0

Si el valor predeterminado estaba en mi modelo de empleado, no tendría que codificar un nombre para la ubicación predeterminada. p. ubicación de ubicación privada; pública Localización Localización {{ obtener si (ubicación == null) ubicación = nueva ubicación (1, "Atlanta", ...) retorno ubicación; } set {location = value; } ¿Es esto aceptable? – SideFX

+0

Podría usar el patrón de registro para ayudar a conciliar el hecho de que estoy programando un valor predeterminado. Pero las ubicaciones en este caso no son datos de referencia, ya que los usuarios pueden agregar nuevas. – SideFX

0

Hubiera pensado que los valores predeterminados son lógica de negocios.

Por ejemplo, si la empresa se muda, la ubicación predeterminada ya no es "Altanta" o "Londres", sino "Nueva York" o "Nottingham".

3

Debido a esto, la ubicación SelectList debe establecerse de manera predeterminada en Location5 cuando se muestre una pantalla de entrada para un empleado nuevo. ¿Debería estar incumpliendo la ubicación en el modelo o en el modelo de vista?

Es lógica de negocio en su ejemplo, pero eso no le impedirá tener su torta y comerla también en este caso. El modelo puede especificar un valor predeterminado; la vista se inicializa a sí misma con este valor predeterminado.

En general, si algo es o no "lógica comercial" o "lógica de presentación" depende de si se trata del dominio o no. Por ejemplo, establecer el año más temprano en un menú desplegable de fecha a, digamos, 1900 es probablemente una preocupación de presentación. Pero también podría ser una preocupación comercial, si el sistema no está diseñado para aceptar fechas anteriores a 1900.

Una cosa que me di cuenta es que las pruebas de la unidad se vuelven incómodas porque en ambos casos, me forzaría para probar contra una ubicación que siempre estará presente en la producción, pero no puedo crear una prueba de unidad con mis propios datos de prueba a menos que "Atlanta" estuviera en el conjunto de ubicaciones que se usa en la prueba. Me gustaría mucho si tienes alguna idea sobre esto también.

Con la estrategia que mencioné anteriormente, las pruebas unitarias son fáciles. Basta con verificar que:

  • el modelo proporciona un valor por defecto
  • la vista acepta este valor por defecto
  • la vista inicializa a este valor predeterminado
  • la vista tiene el comportamiento adecuado si el modelo o no suministros que tienen un valor de
0

Si estaba realmente preocupado por preservar los límites de las reglas de negocio y la capa de presentación, podría proporcionar el valor predeterminado a través de la lógica de negocios y su capa de presentación podría usar ese valor predeterminado para inicializar controles.