Tenemos un sistema horrible escrito en ASP.NET 2.0 al que necesitamos agregar algunas funcionalidades. El problema es que un determinado producto tiene características de interfaz de usuario que deben activarse para los negocios iniciados después de una determinada fecha (y otros desactivados), mientras que la página debe aparecer igual para los negocios existentes.
Estoy presionando para que se reescriba la página para nuevos negocios, ya que instintivamente encuentro que la idea de los interruptores de interfaz de usuario de JavaScript basados en fechas, y la combinación de controles web para los negocios antiguos y nuevos son "desordenados" (por falta de una palabra mejor) )
¿La práctica de tener una IU basada en el tiempo presenta una práctica ampliamente aceptada, y si no, cuáles son los riesgos conocidos de seguir ese curso de acción?
fuente
Respuestas:
No hay nada de malo en ajustar una interfaz de usuario en función de qué características están habilitadas para un cliente, o qué tipos de implementación han elegido, pero el cambio debería
(Tenga en cuenta que todo lo contrario - dis características abling después de un cierto tiempo - es un gran no-no, a menos que haya comunicado claramente que usted está vendiendo una versión de prueba por tiempo limitado creación de tales. Bombas de tiempo en cualquier otra circunstancia hará que la gente odia Eres más rápido que casi cualquier otra cosa.)
fuente
The UI has no business knowing the business rule about what was published when
- De acuerdo, pero incluso Stack Exchange tiene tales reglas de UI. Por ejemplo, el enlace "eliminar" no aparece para otros usuarios en preguntas cerradas hasta que hayan transcurrido dos días, y la opción Migración se deshabilita después de 60 días.if (showDelete) { <button>delete</button> }
oif ((post.date - today).days > 2) { <button>delete</button> }
?El requisito en sí no es problemático, pero hay formas buenas y malas de implementarlo . Si ha copiado y pegado el código en todo el lugar que se ve así:
Será muy difícil de mantener, incluso si parece más rápido en este momento. Por ejemplo, tal vez en algún momento algunos clientes mayores deseen la nueva apariencia. Tal vez en algún momento habrá una tercera configuración con su propia fecha de corte.
Idealmente, desea que esta instrucción if aparezca exactamente una vez en su código, preferiblemente en el lado del servidor. Sin embargo, también debe evitar duplicar toda la aplicación y realizar cambios. Encuentre el código común y factoréelo, luego cree pequeñas funciones separadas solo para las partes que son diferentes. Luego active o desactive esas funciones desde un lugar central.
fuente
Es un requisito, y aunque parece maloliente, básicamente una configuración basada en un valor de fecha y hora, no hay razón para que el tiempo no pueda usarse para alterar su IU. El estuche clásico es una pantalla de satélite que cambia de colores brillantes durante el día a un tema oscuro por la noche (y si es realmente dedicado, un color apagado en el medio).
Sin embargo, una cosa que puedo sugerir como una mejora es eliminar el concepto de una fecha que habilita los controles, pero un número de versión. La versión establece la configuración de la interfaz de usuario (es decir, tiene un indicador que, por ejemplo, está configurado para NewCustomer, y en el futuro se puede expandir para satisfacer los controles adicionales que NewNewCustomer desea, etc.). Esto es mucho más fácil de manejar en el código y huele mucho mejor.
Entonces solo tiene 1 problema que establece el número de versión en función de algunos criterios, y esto se puede hacer mediante una verificación de fecha hoy, posiblemente una opción de configuración del lado del servidor más tarde, o incluso una cookie que se establece mediante el inicio de sesión del usuario en algún momento el futuro.
fuente
Esto parece un caso especial de una pregunta más general: ¿es una mala práctica deshabilitar las características de la interfaz de usuario por razones específicas de acuerdo con reglas predefinidas? La respuesta, entonces, es "por supuesto que no". La entrega de fechas en particular puede ser complicada porque las fechas y las horas son difíciles , pero por principio general no hay una buena razón para no hacerlo si es lo que requieren los requisitos de su negocio.
fuente
Si los cambios tienen que ver con algún propósito comercial específico que es sensible a la fecha, entonces es un mal necesario.
Si se trata de implementar una revisión en el programa que cambiará el programa permanentemente, y el diseño anterior nunca se volverá a utilizar, entonces es mejor simplemente implementar una actualización en el momento correcto.
fuente
Suena bien. Es bastante común que las IU se adapten a diferentes usuarios, por ejemplo, aquí en stackoverflow, se habilitan o deshabilitan diferentes características en función del karma de un usuario individual.
La razón por la que no le gusta es que obviamente agrega complejidad en relación con una solución en la que todos ven la misma interfaz de usuario. Sin embargo, la complejidad parece ser una complejidad esencial , es decir. Es un requisito comercial, no un artefacto de una mala decisión arquitectónica. Por supuesto, tendrá un costo (que debe comunicar a la empresa), pero si la empresa decide que vale la pena, debe implementarlo.
Riesgos conocidos: el mayor riesgo es probablemente probar la interfaz de usuario en las diversas configuraciones. Si comienza a habilitar / deshabilitar las características de la interfaz de usuario para varios grupos de usuarios, puede obtener rápidamente una explosión de posibles configuraciones.
También debe asegurarse de implementar las restricciones en la capa de lógica de negocios, de modo que verifique que los clientes no puedan realizar operaciones que no se les permite, incluso si la IU no lo hace posible en primer lugar:
fuente
Lo que está describiendo es el concepto de datación efectiva , que de ninguna manera es una idea novedosa y, en esencia, un tipo de problema temporal al que podría aplicar un patrón temporal .
Esencialmente, lo que haría en su base de datos es aplicar una fecha de vigencia a los módulos de formulario o las versiones de formulario (en este documento denominadas componentes), almacenando algunos metadatos sobre esos componentes y sus fechas de inicio / finalización efectivas. Por supuesto, también necesitará algunos datos sobre sus usuarios en la aplicación.
Parece que puede tener otras razones más convincentes para considerar reescribir esta aplicación. Si los problemas de citas efectivas son sus únicos problemas, sugeriría que quizás implementar una cita efectiva sea una mejor opción. Si no, tendrá que evaluar eso en función de su escenario.
fuente
Es una función que alterna con la activación en función de la fecha, que es perfectamente válida. Imagine si la función fuera solo para usar durante un período promocional, o si tuviera que finalizar cuando una nueva regulación gubernamental entre en vigencia en una fecha determinada.
Estás trabajando en APS.NET y JavaScript, pero el marco de trabajo de alternancia de características de Java Togglz específicamente tiene una regla de activación basada en fecha (¡y hora!) .
fuente