WPFUI Diagram

En el diagrama de paquetes de la aplicación de escritorio se puede apreciar la arquitectura MVVM (Model View ViewModel). Los tres principales paquetes que conforman esta arquitectura tenemos, el paquete Models, que contiene las clases y clases bases que hacen referencia a diferentes elementos que se muestran por pantalla, como diálogos, páginas, ítems, mensajes y también controladores y administrador de control, en ellos contienen las configuraciones y comportamientos de estos elementos. En el paquete Views, contiene todos los archivos .xaml que corresponde a las vistas y componentes gráficos de la aplicación, en este paquete se incluyen todas las páginas de la aplicación, junto con sus páginas de control, estas páginas de control representan el área de trabajo/control de los usuarios; y también incluye las vistas que componen el layout principal de la ventana (menú lateral, barra de tareas, menú principal, etc). El paquete ViewModels actúa como intermediario entro los dos primeros paquetes mencionados, contiene toda la lógica de control de los elementos visuales, donde se controla el comportamiento e incluso el contenido de ciertos componentes gráficos. Este paquete contiene especializaciones de Models que Views puede utilizar para hacer data-biding. Además, este paquete tiene clases que heredan de las clases bases de Models, como se observa en el diagrama.
Los otros tres paquetes que mantienen dependencia con los ya descritos son SessionRefresher, el cual se encarga de refrescar la sesión con el Proxy, lo hace en intervalos de 30 segundos, durante esta operación va actualizando el token y el refresh token de la sesión Proxy. En caso que se cierre la sesión del usuario por inactividad, este paquete interviene desconectando esa sesión de la app con el servidor web, esto lo hace “limpiando” los tokens del usuario. El paquete que se encarga de monitorear la actividad del usuario es UserActivityDetector, cuenta con un procedimiento Hook para el mouse, con el cual se monitorea todos los eventos provocados por este, de esta manera, si no se interactúa con el mouse, se publica un mensaje de inactividad que otras funciones pueden utilizar. Este mensaje de inactividad hereda de la clase Message del paquete Models como se especifica en el diagrama.
El paquete Helpers provee de funciones que ayudan a otras funciones y clases del programa, como leer y editar el archivo de configuraciones de la app en formato json, cargar los valores de colores de los temas de la aplicación, extraer la dirección IP y MAC del dispositivo que está utilizando el usuario, etc.
La clase Boostrapper actúa como punto de entrada para la aplicación, registra los controladores, configura la ventana inicial, inicializa las instancias de Proxy, HttpClient, Logger, SessionRefresher, y otros objetos que intervienen en el funcionamiento de la aplicación, entre otras configuraciones iniciales cada vez que se corre la app. Esta clase extrae los perfiles de mapeo de las entidades de negocio del paquete MappingProfiles, y modifica algunas configuraciones adicionales dependiendo del idioma configurado de la aplicación, esta información la lee del paquete Helpers.
Dentro del grupo de paquetes secundarios que se muestran en el diagrama se observa a Resources, el cual contiene assets como el background de la aplicación, el ícono de la aplicación, gif de animaciones, paquete de lenguajes, archivos .xaml con las rutas de los iconos del menú lateral y barra de tareas, entre otros.
Converters, este paquete contiene convertidores personalizados, que ayudan a configurar diferentes datos de tipo bool que recibe de otras funciones a parámetros de elementos visuales como color, visibilidad, width, etc. Esto con el objetivo de ir modificando la apariencia de ciertos elementos gráficos durante la ejecución del programa, por ejemplo: revelar un botón después de completar con la validación de un campo textual.
Extensions, controla la propiedad de focus de los elementos UI, puede darlo, preguntar si un elemento lo tiene o ver si ha habido un cambio en esta propiedad.
Behaviors, contiene clases que describen distintos comportamientos generalizados que pueden ser enlazados a diferentes componentes visuales, con el objetivo de facilitar la configuración de componentes del mismo tipo que se comporten igual, por ejemplo, se encuentra definido un comportamiento de TreeView que puede ser adjuntado a cualquier TreeView dentro de la aplicación, y describe si pueden o no cambiar su tamaño, que sucede si un ítem es seleccionado, etc.
Created with the Personal Edition of HelpNDoc: Produce electronic books easily