← Todos los cursos
Architecture · Curso gratuito

Arquitectura de producción en profundidad

Ya has creado una pequeña aplicación Wisej.NET; ahora aprende a estructurar una que un equipo pueda mantener y hacer crecer durante años. Este curso en profundidad te lleva de un proyecto del tamaño de un ejercicio a una arquitectura de nivel de producción, con límites limpios entre interfaz, dominio, servicios, datos e infraestructura, y una separación clara entre componentes en el servidor y widgets en el cliente. Doce módulos recorren la estructura del proyecto y el ciclo de vida de la aplicación, la composición de interfaces adaptables y reutilizables, el enlace de datos y los procesos de guardado seguros, los flujos modales y transaccionales, las tareas en segundo plano y las actualizaciones en tiempo real, la inyección de dependencias y los patrones que se pueden probar, la interoperabilidad con JavaScript, los temas y la localización, y los límites de seguridad, para terminar con el despliegue, el diagnóstico, el balanceo de carga y la entrega de un proyecto final. Está dirigido a desarrolladores que ya publican aplicaciones Wisej.NET y quieren los patrones que las mantienen limpias bajo la presión del mundo real.

Pasa de una pequeña aplicación de formación a una estructura Wisej.NET de producción mantenible: componentes en el servidor, widgets en el cliente y límites de proyecto limpios.

Empezar este curso gratuito

También disponible en: EnglishDeutschFrançaisItaliano

Temario

Módulo 1: Arquitectura Wisej.NET de producción y estructura del proyecto

Módulo 1 del curso Arquitectura de producción en profundidad. Lee la guía de la lección y la guía de conceptos aplicados, mira el recorrido guiado sobre la refactorización para producción, supera la evaluación de conocimientos y, después, reestructura la TicketOps Console en una estructura lista para producción en el laboratorio práctico.

  1. LecturaGuía de la lección · 12 min

    Cómo Wisej.NET asocia los controles .NET del lado del servidor con widgets del lado del navegador, y por qué eso permite que tus controles sigan siendo ligeros.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 12 min

    Profundiza en la arquitectura de producción: cuándo compensa una frontera, cómo conectar servicios sin estado estático y una refactorización completa de TicketOps.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoRefactoriza TicketOps hacia una estructura de producción · 8 min

    Observa cómo una aplicación de tickets escrita por un desarrollador junior se convierte en una solución lista para producción: componentes del lado del servidor asociados a widgets, manejadores de eventos ligeros y lógica trasladada detrás de ITicketService. Se ejecuta aquí mismo, en el reproductor.

    Transcripción de la narración

    Refactorice TicketOps otorgando responsabilidades separadas a la interfaz y a las operaciones comerciales. El objetivo es una estructura donde otro desarrollador pueda encontrar una regla, cambiar su implementación y verificar el resultado sin buscar en los controladores de botones.

    El abarrotado controlador combina consultas de bases de datos, validación, decisiones de flujo de trabajo y actualizaciones de pantalla. Esas responsabilidades cambian por diferentes motivos, por lo que mantenerlas juntas hace que incluso una pequeña corrección sea más difícil de aislar y revisar.

    Cree carpetas que nombren las responsabilidades previstas y luego use esos nombres para decidir a dónde pertenece el código. El beneficio proviene de límites consistentes, no de mover el mismo controlador estrechamente acoplado a un archivo con un nombre diferente.

    Defina la interfaz del servicio de tickets en torno a las operaciones que la pantalla realmente necesita. La forma puede entonces depender de un contrato estable, mientras que las pruebas o implementaciones de almacenamiento posteriores proporcionan diferentes formas de cumplirlo.

    Primero implemente un servicio de tickets falsos y transfiera las decisiones del flujo de trabajo a él. Esto le permite verificar la interacción de la pantalla con el contrato antes de introducir el acceso a datos reales y sus casos de falla adicionales.

    El controlador ahora delega la operación, muestra su resultado y maneja el error. Léalo como una descripción de la acción del usuario; Las reglas comerciales deben ser comprensibles en el servicio en lugar de estar ocultas entre las actualizaciones de control.

    Ejecútelo localmente y verifique tanto la cuadrícula completa como el estado actualizado. Los dos resultados deberían coincidir: el servicio proporcionó los datos y la interfaz ahora le dice al usuario que la actualización se completó.

    Ofrezca al usuario un mensaje de error comprensible y mantenga la excepción real en el registro. Esto separa la explicación necesaria para continuar trabajando del detalle de diagnóstico que los desarrolladores necesitan para investigar la causa.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo TicketOps de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 1 · 12 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Refactorización hacia una arquitectura de producción · 40 min

    Objetivo: Refactoriza la aplicación TicketOps del desarrollador junior en una estructura de solución lista para producción: carpetas Views, Controls, Services, Domain, Data, Infrastructure, Resources y Diagnostics; una interfaz ITicketService con una implementación simulada TicketService; manejadores de eventos ligeros que llaman al servicio; y una breve nota de arquitectura que explique dónde debe ir el código nuevo.

Módulo 2: Arranque, configuración, estado de sesión y ciclo de vida de la aplicación

Módulo 2 del curso Arquitectura de producción en profundidad. Lee la guía de la lección y la guía de conceptos aplicados, mira el recorrido guiado sobre SessionContext, supera la evaluación de conocimientos y, después, construye un SessionContext con ámbito de sesión y una página de diagnóstico en el laboratorio práctico.

  1. LecturaGuía de la lección · 12 min

    Estado de aplicación frente a estado de sesión, de usuario, de pestaña del navegador y de petición, y por qué una sesión se parece más a una instancia de una aplicación de escritorio que a una cuenta de usuario.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 12 min

    Profundiza en el estado de sesión: un contexto con ámbito de sesión conectado sin campos estáticos, la canalización de arranque y configuración, y la trampa de los campos estáticos.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoConstruye un SessionContext y una página de diagnóstico · 8 min

    Observa cómo el estado de cada usuario sale de los campos estáticos y pasa a un SessionContext con ámbito de sesión, con una página de diagnóstico que separa la configuración global de los valores de cada sesión. Se ejecuta aquí mismo, en el reproductor.

    Transcripción de la narración

    Decida cómo se inicia la aplicación Wisej.NET y a dónde pertenece su estado antes de agregar más flujos de trabajo. Las opciones de configuración y duración determinan si la pantalla de cada usuario ve los datos correctos a medida que cambian las sesiones y las pestañas.

    Una sesión representa una interacción en curso, no simplemente la identidad de una persona. Las actualizaciones, las reconexiones y las pestañas múltiples significan que un usuario puede tener varios contextos, por lo que los registros seleccionados no deben almacenarse automáticamente como estado para todo el usuario.

    Para cada valor, distinga la propiedad de toda la aplicación, sesión, usuario y pestaña. Pregunte quién debería observar un cambio y cuándo debería desaparecer; esas respuestas guían la vida de manera más confiable que la conveniencia de un campo global.

    Revise Default.json como parte de la implementación, incluido el tema, el tiempo de espera, los límites de la sesión del cliente, la validación y la cultura. Estas configuraciones influyen en el comportamiento del tiempo de ejecución, por lo que necesitan valores deliberados y revisión junto con el código de la aplicación.

    Los campos estáticos ordinarios se comparten entre sesiones, aunque Wisej.NET proporciona acceso sensible a la sesión a través de la Aplicación. No infiera que su propio campo estático de ticket seleccionado obtiene el mismo aislamiento; puede exponer el valor de otra sesión.

    Coloque los valores de propiedad de la sesión en un contexto de sesión o en el almacenamiento de sesión proporcionado por Wisej.NET. Luego, cada sesión tiene su propia instancia, lo que hace visible el aislamiento previsto en el diseño en lugar de depender de convenciones de nomenclatura.

    Defina el contexto de la sesión con un identificador de sesión, usuario actual y ticket seleccionado. La agrupación de estos valores relacionados deja claro qué contexto utiliza un formulario o servicio cuando maneja una operación.

    Pase el contexto a formularios y servicios que lo necesiten. El controlador de selección de tickets escribe en ese contexto, por lo que su dependencia es visible y la selección pertenece a la sesión actual en lugar de a una variable global compartida.

    Seleccione un ticket en la aplicación en ejecución y lea el estado específico de la sesión. Confirme que la selección mostrada proviene del contexto actual; este es el resultado visible de la decisión de propiedad tomada anteriormente.

    Siga aplicando la misma disciplina en todo TicketOps: pantallas diseñables, nombres comprensibles, límites de servicio y fallas visibles. La clara responsabilidad sobre el estado de la aplicación complementa esas prácticas al hacer que el comportamiento sea más fácil de revisar en múltiples sesiones.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo TicketOps de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 2 · 12 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — SessionContext y auditoría del estado estático · 40 min

    Objetivo: Un SessionContext con ámbito de sesión para la TicketOps Console: registrado con duración de sesión, inyectado en los formularios y servicios, que muestre el ID de sesión, el usuario, el tenant, el tema y el perfil de cliente, además de una página de diagnóstico que separe la configuración global de la aplicación de los valores de cada sesión, y una auditoría del estado estático aplicada a la aplicación existente.

Módulo 3: Diseños adaptables, perfiles de cliente y composición de interfaces reutilizables

Módulo 3 del curso Arquitectura de producción en profundidad. Lee la guía de la lección y la guía de conceptos aplicados, mira el recorrido guiado sobre el espacio de trabajo responsive, supera la evaluación de conocimientos y, después, construye un Ticket Workspace responsive con Client Profiles en el laboratorio práctico.

  1. LecturaGuía de la lección · 12 min

    Elige los motores de diseño según la intención: Dock/Anchor para paneles de escritorio, Table para cuadrículas de formulario, Flow para contenido que se ajusta y Flex para regiones proporcionales.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 12 min

    Profundiza en la interfaz responsive: anidar motores de diseño, reaccionar a los cambios de Client Profile y construir UserControls reutilizables para el Ticket Workspace.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoConstruye un Ticket Workspace responsive · 8 min

    Observa cómo un mismo Ticket Workspace se adapta a los perfiles de escritorio, tableta y teléfono mediante motores de diseño, Client Profiles y UserControls reutilizables. Se ejecuta aquí mismo, en el reproductor.

    Transcripción de la narración

    Adapte Ticket Workspace a computadoras de escritorio, tabletas y teléfonos conservando la tarea en cada tamaño. El diseño debe cambiar la forma en que se organiza la información sin que los usuarios pierdan el registro o la acción en la que están trabajando.

    Comience con lo que los operadores necesitan comparar, leer y actuar juntos. Los paneles superpuestos no sólo son desordenados; pueden ocultar el mensaje o registro que da significado a una acción.

    Elija contenedores según su función: fijación de bordes, alineación tabular, artículos fluidos o distribución flexible. Hacer coincidir el mecanismo de diseño con la relación deseada es más confiable que colocar manualmente cada control para cada ancho.

    Empaquete secciones de interfaz repetidas en UserControls que sigan siendo utilizables en el diseñador. Una barra de búsqueda compartida brinda a varias pantallas un diseño y un comportamiento fáciles de mantener, mientras que el espacio de trabajo compone esas partes en una tarea más grande.

    Utilice ClientProfiles.json para describir los perfiles que impulsan los cambios de propiedades del lado del servidor. Un perfil es una regla de adaptación deliberada, así que mantenga su efecto comprensible en lugar de dispersar comprobaciones de ancho entre controladores de eventos no relacionados.

    Aplique el perfil activo en un controlador: oculte la navegación, mueva la actividad a una pestaña y exponga una acción de retroceso cuando sea necesario. Centralizar estos cambios coordinados hace que cada modo de diseño sea más fácil de entender y verificar.

    Pruebe el mismo flujo de trabajo en cada ancho. El escritorio muestra el contexto completo, la tableta mueve la actividad a una pestaña y el teléfono se concentra en una tarea; compruebe que los usuarios aún puedan acceder a la información y las acciones que necesitan.

    Entregue juntos el espacio de trabajo, los perfiles, las notas de perfil y la barra de búsqueda reutilizable. Explique qué cambia cada perfil y por qué, para que el próximo desarrollador pueda preservar el flujo de trabajo al agregar otro panel o pantalla.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo TicketOps de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 3 · 12 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Espacio de trabajo de tickets adaptable · 40 min

    Objetivo: Un UserControl TicketWorkspace responsive para la TicketOps Console: todos los paneles a la vez en escritorio, el panel de actividad contraído en una pestaña en tableta y una única vista orientada a la tarea con un botón de volver en teléfono, todo ello controlado por ClientProfiles.json / ResponsiveProfileChanged, con un control SearchBar reutilizable.

Módulo 4: Enlace de datos, DataGridView y flujos de trabajo orientados a datos

Módulo 4 del curso Arquitectura de producción en profundidad. Lee la guía de la lección y la guía de conceptos aplicados, mira el recorrido guiado sobre el enlace de datos, supera la evaluación de conocimientos y, después, construye la cuadrícula de Work Orders y la vista maestro-detalle en el laboratorio práctico.

  1. LecturaGuía de la lección · 12 min

    Usa BindingSource, BindingList<T>, INotifyPropertyChanged, el formato de la cuadrícula, el filtrado, los flujos maestro-detalle y los patrones de guardar/cancelar en las pantallas de datos de negocio.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 12 min

    Profundiza en el enlace de datos: un modelo Work Order observable, la conexión de BindingSource con la cuadrícula, el formato de columnas, el filtrado, la sincronización maestro-detalle y un Save/Cancel limpio.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoConstruye una cuadrícula de Work Orders enlazada a datos · 8 min

    Un recorrido guiado sobre el enlace de datos que puedes ejecutar aquí mismo, en el reproductor.

    Transcripción de la narración

    Conecte la lista y el editor TicketOps para que los usuarios puedan inspeccionar, cambiar y guardar el mismo registro comercial de manera coherente. El enlace reduce la sincronización manual, pero el flujo de trabajo aún debe definir la selección, los cambios no guardados y los resultados guardados.

    Un enlace conecta una propiedad de modelo a una propiedad de control, mientras que BindingSource coordina el elemento actual. Utilice esa fuente compartida para obtener listas y detalles de modo que un cambio de selección actualice constantemente el contexto del editor.

    Las notificaciones de cambio de propiedad informan a los controles vinculados cuando cambia el valor de una orden de trabajo. Una lista con reconocimiento de enlaces informa los cambios de recopilación por separado; En conjunto, estas notificaciones evitan que la cuadrícula dependa de actualizaciones manuales después de cada edición o adición.

    Conecte la red a un BindingSource y conecte esa fuente a la lista. Elija las columnas deliberadamente. Mantenga el formato de visualización en la interfaz de usuario, separado de los datos y las reglas comerciales.

    Utilice el filtrado de búsqueda y estado para limitar la lista y luego deje que la fila seleccionada determine el registro detallado. Mantener esa relación explícita ayuda a los usuarios a comprender exactamente a qué orden de trabajo afectará su próxima edición.

    Realice un seguimiento de si el editor tiene cambios no guardados. Cancelar debería restaurar los valores anteriores, mientras que Guardar intenta confirmarlos; si falla, informe ese error en lugar de permitir que la visualización vinculada implique que los datos persistieron.

    Proporcione el modelo, la configuración de enlace, los controladores de formato, el editor y las notas de confirmación o cancelación. La transferencia debe explicar cómo un registro seleccionado pasa de la visualización a la edición y luego a un estado guardado o restaurado.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo TicketOps de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 4 · 12 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Cuadrícula de órdenes de trabajo y maestro-detalle · 40 min

    Objetivo: Crea una cuadrícula de Work Orders con búsqueda, filtro por estado, editor maestro-detalle, seguimiento de cambios sin guardar, Save/Cancel y columnas con formato para la prioridad, el usuario asignado, la fecha de vencimiento y el coste. Entregables: Modelo WorkOrder observable o view model; Configuración de BindingSource; Manejadores de formato de la cuadrícula; Editor maestro-detalle; Notas sobre el comportamiento de confirmar/cancelar.

Módulo 5: Validación, experiencia de errores y procesos de guardado seguros

Módulo 5 del curso Arquitectura de producción en profundidad. Lee la guía de la lección y la guía de conceptos aplicados, mira el recorrido guiado sobre la validación, supera la evaluación de conocimientos y, después, construye la validación de Work Orders y la canalización de guardado en el laboratorio práctico.

  1. LecturaGuía de la lección · 12 min

    Diseña la validación como experiencia de usuario y a la vez como mecanismo de seguridad del negocio, con validación centralizada, errores mostrados en cada campo, comprobaciones del lado del servidor y canalizaciones de guardado coherentes.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 12 min

    Profundiza en la validación: reglas por capas, un comando de guardado reutilizable, errores por campo y de resumen, y una canalización de guardado segura en la que el servidor es la verdadera barrera.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoAñade validación y una canalización de guardado segura · 8 min

    Un recorrido guiado sobre la validación que puedes ejecutar aquí mismo, en el reproductor.

    Transcripción de la narración

    Haga que el editor de órdenes de trabajo explique la entrada no válida antes de intentar realizar un guardado inseguro. El proceso de validación conecta los comentarios de campo con las reglas comerciales y la persistencia, para que el usuario sepa qué debe cambiar y si se guardó algo.

    Distinga comprobaciones de interfaz, validez comercial, restricciones de persistencia y autorización. Cada uno protege un límite diferente; Deshabilitar Guardar puede guiar a los usuarios, pero el servicio aún debe rechazar una solicitud que viole sus reglas o permisos.

    Coloque cada error cerca del campo que necesita atención y recopile los problemas en un resumen. Utilice un lenguaje que explique la corrección, de modo que los usuarios puedan localizar el problema sin comprender la excepción subyacente o la regla de la base de datos.

    Recopile y valide la entrada antes de crear el comando. Verifique las reglas comerciales y la autorización antes de guardar. Sólo después de un guardado exitoso la aplicación debe actualizar la pantalla y registrar el resultado.

    Deténgase temprano cuando falle la validación, antes de que comience la persistencia. Si la operación de almacenamiento falla, mantenga los detalles reales del diagnóstico en el registro y explique claramente el error al guardar en lugar de presentar un error interno al usuario.

    Aplique la canalización a campos obligatorios, fechas de vencimiento, límites de costos, transiciones de estado y restricciones de funciones. Estos casos abarcan diferentes capas, lo que ayuda a verificar que el editor hace más que comprobar si un cuadro de texto está vacío.

    Active un guardado fallido y luego inspeccione el editor. Las ediciones del usuario deben permanecer disponibles, el mensaje debe explicar el problema y los detalles internos deben aparecer solo en el registro para que la recuperación no requiera volver a escribir el trabajo.

    Una buena validación protege los datos y al mismo tiempo ayuda a las personas a terminar su trabajo. Preserve el contexto, explique las correcciones y distinga una entrada rechazada de un guardado fallido para que la siguiente acción quede clara.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo TicketOps de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 5 · 12 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Validación de órdenes de trabajo y proceso de guardado · 40 min

    Objetivo: Añade validación al editor de Work Orders. Aplica campos obligatorios, reglas de fecha de vencimiento, rango de coste, transiciones de estado válidas y restricciones basadas en roles. Muestra errores en cada campo y un panel de resumen. Entregables: Reglas de validación o validación del modelo; Objeto de comando de guardado; Panel de resumen de errores; Método de canalización de guardado seguro; Casos de prueba de validación.

Módulo 6: Flujos modales, objetos de resultado de diálogo e interfaz transaccional

Módulo 6 del curso Arquitectura de producción en profundidad. Lee la guía de la lección y la guía de conceptos aplicados, mira el recorrido guiado sobre el cuadro de diálogo de aprobación, supera la evaluación de conocimientos y, después, construye el cuadro de diálogo de aprobación y su resultado tipado en el laboratorio práctico.

  1. LecturaGuía de la lección · 12 min

    Usa formularios modales y flujos de diálogo para acciones de negocio complejas como aprobaciones, escalados, asignaciones, confirmaciones y transacciones de varios pasos.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 12 min

    Profundiza en los flujos modales: objetos de resultado de diálogo tipados, confirmar antes de aplicar y tratar una acción de negocio de varios pasos como una sola transacción.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoConstruye un flujo de diálogo de aprobación · 8 min

    Un recorrido guiado sobre el cuadro de diálogo de aprobación que puedes ejecutar aquí mismo, en el reproductor.

    Transcripción de la narración

    Utilice un cuadro de diálogo de aprobación para hacer explícita la decisión del usuario antes de cambiar el estado del negocio. La pantalla recopila la intención, devuelve un resultado estructurado y le da al servicio un punto claro en el que puede comenzar la ejecución.

    Abrir un modal debería marcar un límite de decisión real en el flujo de trabajo. Los usuarios deben comprender qué están confirmando y qué significa la cancelación antes de que la aplicación realice la acción consiguiente.

    Mantenga el diálogo centrado en aprobar o rechazar, con comentarios y confirmación o cancelación explícita. Una única decisión hace que el resultado sea más fácil de validar y evita que cambios no relacionados se conviertan en efectos secundarios ocultos.

    Espere el cuadro de diálogo y lea el resultado de aprobación escrito en lugar de inspeccionar luego las propiedades de control no relacionadas. El resultado lleva la decisión como un contrato, manteniendo a la persona que llama independiente de cómo el diálogo organiza sus campos.

    Sólo un resultado confirmado debería desencadenar la transacción del servicio. Mantener la ejecución fuera del diálogo significa que las mismas reglas de aprobación permanecen en la operación comercial en lugar de depender de una ventana particular que esté abierta.

    Requerir comentarios cuando el usuario los rechace, porque el motivo es parte de esa decisión. Pruebe tanto Cancelar como el botón Cerrar: ninguno debe emitir el comando de servicio ni cambiar el registro comercial.

    Entregue el cuadro de diálogo, el resultado escrito, el comando de servicio, el diagrama de flujo de trabajo y los casos de prueba. Muestre confirmación, rechazo con comentarios y cancelación para que la transferencia describa tanto la acción como los caminos que deliberadamente no realizan cambios.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo TicketOps de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 6 · 12 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Diálogo de aprobación y resultado tipado · 40 min

    Objetivo: Construye un cuadro de diálogo de aprobación que acepte o rechace la orden de trabajo seleccionada. Debe devolver un objeto de resultado tipado, exigir un comentario en caso de rechazo y llamar al servicio de aprobación solo después de la confirmación. Entregables: Formulario ApprovalDialog; Clase ApprovalDialogResult; Método de ApprovalService; Casos de prueba de tipo unitario para el tratamiento del resultado; Diagrama del flujo.

Módulo 7: Tareas en segundo plano, actualizaciones en tiempo real y sincronización

Módulo 7 del curso Arquitectura de producción en profundidad. Lee la guía de la lección y la guía de conceptos aplicados, mira el recorrido guiado sobre las tareas en segundo plano, supera la evaluación de conocimientos y, después, construye la importación CSV en segundo plano en el laboratorio práctico.

  1. LecturaGuía de la lección · 12 min

    Usa tareas en segundo plano y push del servidor en tiempo real para ejecutar trabajos largos, actualizar la interfaz de forma segura, admitir la cancelación y no bloquear la interfaz de usuario.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 12 min

    Profundiza en el trabajo en segundo plano: ejecutar fuera del hilo de la interfaz, devolver las actualizaciones de forma segura, la cancelación y el informe de errores por fila en la importación CSV.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoEjecuta una importación CSV en segundo plano · 8 min

    Un recorrido guiado sobre las tareas en segundo plano que puedes ejecutar aquí mismo, en el reproductor.

    Transcripción de la narración

    Importe valores separados por comas en segundo plano mientras mantiene la pantalla receptiva. Los usuarios deberían poder ver el progreso, solicitar la cancelación y comprender el informe final sin preguntarse si la aplicación ha dejado de responder.

    Una importación larga dentro del controlador de clic mantiene la sesión ocupada con ese trabajo. Sacar la operación de la interacción inmediata permite que la pantalla siga siendo útil mientras la importación procesa sus filas.

    Inicie la operación en segundo plano con Application.StartTask, luego regrese al contexto de sesión correcto antes de acceder a los controles. RunInContext establece ese límite, por lo que el trabajo que se ejecuta en otro lugar no actualiza los controles como si ya pertenecieran al contexto de la interfaz.

    Publique el progreso en hitos significativos y utilice Application.Update para entregar esos cambios al navegador. Registre las filas no válidas individualmente para que pueda aparecer un registro incorrecto en el informe sin finalizar innecesariamente toda la importación.

    Deje que Cancel solicite la cancelación a través del token de cancelación mientras la interfaz permanece disponible. El trabajador deberá observar esa solicitud en puntos seguros; presionar el botón debería conducir a un resultado controlado, no a una interrupción inexplicable.

    Ejecute otra importación hasta su finalización y compare los resultados de éxito, cancelación y error. Cada ruta debe dejar los controles en un estado coherente con un informe útil, para que el usuario pueda comprender el resultado y comenzar otra operación.

    Trate el lanzamiento, el progreso, la cancelación y los informes como un flujo de trabajo de un solo usuario. La implementación en segundo plano tiene éxito cuando el usuario permanece informado y en control durante toda la operación, no sólo cuando finaliza la importación.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo TicketOps de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 7 · 12 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Importación CSV en segundo plano · 40 min

    Objetivo: Implementa una simulación de importación CSV que se ejecute en segundo plano, actualice una barra de progreso y un panel de registro, admita la cancelación e informe de los errores de cada fila sin bloquear la interfaz. Entregables: ImportService; Lanzador de la tarea en segundo plano; Interfaz de progreso; Gestión de la cancelación; Notas sobre la seguridad de hilos.

Módulo 8: Servicios, inyección de dependencias y patrones de interfaz que se pueden probar

Módulo 8 del curso Arquitectura de producción en profundidad. Lee la guía de la lección y la guía de conceptos aplicados, mira el recorrido guiado sobre la inyección de dependencias, supera la evaluación de conocimientos y, después, inyecta servicios en la interfaz en el laboratorio práctico.

  1. LecturaGuía de la lección · 12 min

    Usa el registro de servicios de Wisej.NET, los servicios con ámbito de sesión, la inyección por propiedad, la inyección por constructor en los servicios y patrones sencillos de presenter / servicio de aplicación.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 12 min

    Profundiza en los servicios y la DI: interfaces limpias con perfiles simulado y de producción, elección de la duración de los servicios y un presenter que hace que una pantalla sea testeable.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoInyecta servicios para una interfaz testeable · 8 min

    Un recorrido guiado sobre la inyección de dependencias que puedes ejecutar aquí mismo, en el reproductor.

    Transcripción de la narración

    Deje que las pantallas declaren los servicios que necesitan mediante inyección de dependencia. Esto separa su trabajo de las decisiones de construcción, lo que permite que la misma interfaz utilice una implementación de demostración ahora y una implementación de producción más adelante.

    Defina interfaces para las capacidades que consume la pantalla, como tickets, usuarios, permisos, notificaciones y auditoría. Estos contratos deben describir operaciones útiles en lugar de exponer las clases internas o las opciones de almacenamiento detrás de cada servicio.

    Registre los servicios falsos en Application.Services y elija su vida útil deliberadamente. Luego, el atributo de inyección proporciona las dependencias de la página, lo que le permite ejercer el contrato de servicio antes de conectar la infraestructura real.

    Mueva las decisiones de coordinación de la pantalla a un presentador, dejando los controles responsables de la interacción y la visualización. Las consultas a la base de datos, las decisiones de permisos y las reglas entre pantallas se vuelven más fáciles de inspeccionar sin tener que navegar por el árbol de control visual.

    Compare las duraciones compartidas, de sesión, de subprocesos y transitorias con lo que almacena el servicio. Cualquier cosa específica del usuario necesita el alcance de sesión adecuado; un registro compartido conveniente no debe convertir el contexto de un usuario en la dependencia de otro usuario.

    Reemplace el registro falso con una implementación de producción que cumpla con la misma interfaz. La pantalla debería seguir llamando a las mismas operaciones, demostrando que los cambios de infraestructura no requieren reescribir la lógica de interacción.

    Es más fácil razonar sobre las dependencias cuando se declaran, reemplazan y tienen el alcance correcto. Un revisor debería poder ver lo que necesita una pantalla y probar esas interacciones sin construir todo el entorno de producción.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo TicketOps de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 8 · 12 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Inyecta servicios en la interfaz · 40 min

    Objetivo: Refactoriza la aplicación para que use servicios inyectados para tickets, usuarios, permisos, notificaciones y registro de auditoría. Añade un perfil de registro de servicios simulados y un perfil de registro de producción. Entregables: Método de registro de servicios; Cinco interfaces con sus implementaciones simuladas; MainPage/Form inyectado; Presenter o servicio de flujo de trabajo para una pantalla; Tabla de duración de los servicios.

Módulo 9: Integración de JavaScript, interoperabilidad con Widget y mejoras en el cliente

Módulo 9 del curso Arquitectura de producción en profundidad. Lee la guía de la lección y la guía de conceptos aplicados, mira el recorrido guiado sobre la interoperabilidad con JavaScript, supera la evaluación de conocimientos y, después, construye atajos de teclado y la interoperabilidad con el portapapeles en el laboratorio práctico.

  1. LecturaGuía de la lección · 12 min

    Usa JavaScript de forma segura donde aporte valor: atajos, comportamiento de widgets, bibliotecas externas, API del navegador y callbacks entre servidor y cliente, sin convertir la aplicación en una SPA frágil.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 12 min

    Profundiza en la interoperabilidad con JavaScript: atajos de teclado, el viaje de ida y vuelta del callback del cliente al servidor y una nota de seguridad para cada punto de interoperabilidad.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoAñade interoperabilidad segura con JavaScript · 8 min

    Un recorrido guiado sobre la interoperabilidad con JavaScript que puedes ejecutar aquí mismo, en el reproductor.

    Transcripción de la narración

    Agregue un método abreviado de teclado y un asistente de portapapeles como mejoras específicas del navegador. Los ejemplos muestran cómo la interacción local puede volverse más rápida mientras el servidor aún controla el contenido del enlace y registra la operación.

    Utilice JavaScript para el comportamiento del lado del navegador, como accesos directos, interacciones de widgets e interfaces de programación del navegador. Ofrézcale una mejora específica mientras mantiene las decisiones comerciales en la aplicación del lado del servidor, donde siguen siendo ejecutables.

    Mantenga el script en una fuente con nombre y fácil de mantener y adjúntelo solo después de que exista el widget. Un recurso integrado o JavaScriptSource hace que el comportamiento sea más fácil de localizar, mientras que la sincronización correcta del ciclo de vida le proporciona un objetivo válido.

    Maneje Control K en el navegador para enfocar la búsqueda global de inmediato. Dado que esta acción solo cambia el enfoque, no necesita un viaje de ida y vuelta al servidor antes de que el usuario pueda comenzar a ingresar una consulta.

    Cree el enlace seguro en el servidor, luego invoque el comportamiento del portapapeles a través de Application.Eval y registre la acción. El navegador realiza la interacción con el portapapeles local mientras la aplicación retiene el control de lo que se comparte.

    Documente qué datos van a JavaScript, qué resultados regresan y qué decisiones permanecen en el servidor. Ese límite hace que la mejora sea más fácil de revisar y evita que la comodidad del navegador adquiera silenciosamente autoridad comercial.

    Mantenga cada guión lo suficientemente pequeño como para que su propósito y límites sean obvios. El comportamiento centrado del navegador es más fácil de mantener cuando complementa el flujo de trabajo Wisej.NET y no se convierte en un hogar alternativo para las reglas comerciales.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo TicketOps de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 9 · 12 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Atajos de teclado e interoperabilidad con el portapapeles · 40 min

    Objetivo: Añade atajos de teclado del lado del cliente y un ayudante para el portapapeles del navegador. Usa JavaScript para detectar Ctrl+K y llevar el foco al cuadro de búsqueda global, y añade una acción de copia al portapapeles confirmada por el servidor para el enlace del ticket seleccionado. Entregables: Script incrustado o JavaScriptSource; Método C# que invoca el comportamiento del cliente; Manejador del callback del servidor; Nota de seguridad para cada punto de interoperabilidad.

Módulo 10: Temas, recursos, localización y modernización de la interfaz

Módulo 10 del curso Arquitectura de producción en profundidad. Lee la guía de la lección y la guía de conceptos aplicados, mira el recorrido guiado sobre los temas, supera la evaluación de conocimientos y, después, construye un panel de control con tema y localizado en el laboratorio práctico.

  1. LecturaGuía de la lección · 12 min

    Moderniza las aplicaciones Wisej.NET con temas, CSSStyle, recursos, iconos, cambio de tema en tiempo de ejecución, localización y reglas de coherencia visual.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 12 min

    Profundiza en los temas: cambio claro/oscuro en tiempo de ejecución, etiquetas de estado reutilizables mediante CSSStyle, gestión de recursos y localización sensible a la referencia cultural.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoAplica un tema y localiza el panel de control · 8 min

    Un recorrido guiado sobre los temas que puedes ejecutar aquí mismo, en el reproductor.

    Transcripción de la narración

    Modernice el panel a través de reglas visuales compartidas y contenido culturalmente consciente. Un tema coherente, una visualización de estado reutilizable y un formato localizado ayudan a los usuarios a reconocer el mismo flujo de trabajo incluso cuando cambian el idioma y el espacio disponible.

    Incluya opciones amplias de apariencia en el tema antes de agregar excepciones específicas de control. Las reglas centrales permiten que un ajuste visual llegue a toda la aplicación, mientras que las anulaciones locales dispersas hacen que el mismo cambio sea más difícil de aplicar de manera consistente.

    Cree un chip de estado UserControl para poseer su texto, color y espaciado. Reutilizar ese componente evita que las pantallas inventen diferentes significados visuales para el mismo estado y brinda a los ajustes futuros un lugar donde vivir.

    Almacene etiquetas visibles para el usuario en recursos y formatee fechas y dinero a través de la cultura seleccionada. La traducción y el formato resuelven diferentes problemas, por lo que cambiar el idioma también debe producir valores que los usuarios puedan interpretar correctamente.

    Cambie la cultura en el panel real e inspeccione tanto el ajuste del texto como los valores formateados. Las etiquetas alemanas más largas pueden exponer suposiciones de diseño, mientras que las fechas y la moneda modificadas revelan si el formato sigue la cultura seleccionada en lugar del texto codificado.

    Revise juntos el espaciado, la jerarquía, el contraste, los iconos, los mensajes de estado y las excepciones de temas. Estas comprobaciones conectan la coherencia visual con la lectura y la acción prácticas, lo que ayuda a identificar una pantalla atractiva que aún oculta información importante.

    Un tablero pulido mantiene su significado en todas las pantallas y culturas. Los componentes y recursos compartidos hacen que se pueda mantener la coherencia, mientras que las pruebas de diseños traducidos reales confirman que el diseño aún respalda la tarea del usuario.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo TicketOps de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 10 · 12 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Panel con tema y localizado · 40 min

    Objetivo: Crea un panel de control de operaciones cuidado con un selector de tema claro/oscuro, etiquetas de estado coherentes, textos localizados para al menos dos referencias culturales y formato de fechas y moneda según la referencia cultural. Entregables: Interfaz del selector de tema; UserControl de etiqueta de estado; Archivos de recursos o notas de localización; Lista de comprobación de modernización de la interfaz aplicada a dos pantallas.

Módulo 11: Seguridad, autenticación, autorización y límites de servidor seguros

Módulo 11 del curso Arquitectura de producción en profundidad. Lee la guía de la lección y la guía de conceptos aplicados, mira el recorrido guiado sobre la seguridad, supera la evaluación de conocimientos y, después, construye la autenticación, la autorización y la auditoría en el laboratorio práctico.

  1. LecturaGuía de la lección · 12 min

    Construye aplicaciones Wisej.NET seguras manteniendo la confianza en el servidor, saneando las rutas de visualización peligrosas, gestionando la autenticación, aplicando la autorización en los servicios y documentando la configuración de seguridad del despliegue.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 12 min

    Profundiza en la seguridad: autorización aplicada en el servidor, por qué un botón deshabilitado no es un control de seguridad, tratamiento seguro del HTML y registro de auditoría.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoAñade autenticación y autorización · 8 min

    Un recorrido guiado sobre la seguridad que puedes ejecutar aquí mismo, en el reproductor.

    Transcripción de la narración

    Hacer cumplir acciones sensibles en el servicio que las realiza. Este módulo utiliza la interfaz para guiar a los usuarios legítimos y al mismo tiempo demuestra que el servidor rechaza solicitudes no autorizadas incluso cuando se manipulan los controles de la pantalla.

    Establezca la identidad de la sesión antes de permitir que comiencen los flujos de trabajo confidenciales. La autenticación proporciona la respuesta confiable sobre quién está actuando, que las verificaciones de permisos posteriores utilizan para decidir si esa persona puede realizar una operación.

    Autorizar en el límite de ejecución y auditar tanto el éxito como el rechazo. Un registro de los intentos rechazados es importante junto con las acciones completadas, porque explica por qué una solicitud no realizó ningún cambio y respalda la investigación del uso indebido.

    Fuerce el botón a un estado habilitado e intente la acción restringida. El servicio aún debe negarlo, lo que demuestra que una configuración de interfaz útil no es el mecanismo que protege la operación subyacente.

    Codifique el texto proporcionado por el usuario antes de colocarlo en superficies que puedan interpretar el marcado. Revise deliberadamente cada ruta AllowHtml para que el contenido destinado a ser datos no se convierta inesperadamente en una estructura de página ejecutable o activa.

    Audite acciones importantes e inspeccione la sesión circundante, las cookies, la carga, el registro y la configuración de la Política de seguridad de contenido. Estas comprobaciones complementan los permisos de servicio al revisar cómo la identidad, el contenido entrante y la información de diagnóstico viajan a través de la aplicación.

    El servidor debe poder rechazar una solicitud insegura independientemente de cómo llegó a la aplicación. Una identidad clara, verificaciones de permisos a nivel de servicio, resultados seguros y registros de auditoría significativos trabajan juntos para hacer cumplir ese límite.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo TicketOps de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 11 · 12 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Autenticación, autorización y auditoría · 40 min

    Objetivo: Añade una simulación de autenticación, autorización basada en roles, comprobaciones de permisos del lado del servidor, tratamiento seguro del HTML y registro de auditoría. Demuestra que una acción no autorizada no puede ejecutarse aunque se habilite manualmente un control de la interfaz. Entregables: Pantalla de inicio de sesión; Servicio de permisos; Comprobaciones de autorización en los servicios; Política de texto/HTML seguro; Lista de comprobación de seguridad.

Módulo 12: Despliegue, diagnóstico, balanceo de carga y entrega del proyecto final

Módulo 12 del curso Arquitectura de producción en profundidad. Lee la guía de la lección y la guía de conceptos aplicados, mira el recorrido guiado sobre el despliegue, supera la evaluación de conocimientos y, después, prepara la publicación y la entrega del proyecto final en el laboratorio práctico.

  1. LecturaGuía de la lección · 12 min

    Prepara una aplicación Wisej.NET para el despliegue y la operación: opciones de hosting, health checks, registro, diagnóstico, balanceo de carga, notas de la versión y presentación del proyecto final.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 12 min

    Profundiza en el despliegue: ventajas e inconvenientes del hosting, health checks y diagnóstico, sesiones persistentes (sticky sessions) para el balanceo de carga y un plan limpio de publicación y reversión.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoPrepara el proyecto final para su publicación · 8 min

    Un recorrido guiado sobre el despliegue que puedes ejecutar aquí mismo, en el reproductor.

    Transcripción de la narración

    Prepare TicketOps para su funcionamiento después de la publicación. El final incluye decisiones de alojamiento, evidencia de salud, diagnósticos e instrucciones de recuperación para que alguien además del desarrollador pueda verificar y respaldar la aplicación en ejecución.

    Elija el destino de alojamiento comprobando su efecto en la configuración, los registros, el escalado, la identidad y las conexiones WebSocket. Esos requisitos dan forma al plan de soporte, así que regístrelos antes de tratar la publicación como una implementación completa.

    Exponga información de salud segura a través de HealthCheck.json para monitores y balanceadores de carga. La respuesta debería ayudar a determinar si la instancia se puede utilizar sin revelar credenciales u otros detalles de configuración que las personas que llaman operativamente no necesitan.

    Coloque la información del entorno, el estado de registro y las comprobaciones en una página de diagnóstico protegida por funciones. Esto le brinda al personal de soporte autorizado un punto de partida consistente al tiempo que limita la información que se muestra a lo que es útil para operar la aplicación.

    El servidor mantiene el estado de sesión de cada usuario. Configure sesiones fijas para que el equilibrador de carga mantenga a ese usuario en la instancia correcta. La implementación también debe permitir el paso de la conexión WebSocket de la aplicación.

    Empaquete la lista de verificación, los diagnósticos, las notas de la versión, las notas de reversión y el script de demostración. El paquete debe explicar qué cambió, cómo verificarlo y cómo recuperarlo, haciendo que otra persona pueda revisar la versión.

    El capstone estará listo para ser entregado cuando su funcionamiento sea tan comprensible como sus pantallas. Guarde la evidencia de la versión con la aplicación para que el soporte y los cambios futuros comiencen desde una base compartida y documentada.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo TicketOps de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 12 · 12 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Publicación y entrega del proyecto final · 40 min

    Objetivo: Prepara la aplicación del proyecto final para su publicación. Añade HealthCheck.json, una página de diagnóstico, una lista de comprobación de despliegue, notas de la versión, notas de reversión y un guion final de demostración. Entregables: HealthCheck.json; Lista de comprobación de despliegue; Página de diagnóstico; Notas de la versión; Presentación del proyecto final / guion de demostración.