# V12
## Conceptos básicos
V12 es un marco de trabajo estructurado y extensible para construir y mantener sistemas Web complejos formados por
una colección de paquetes integrados mediante un conjunto de conceptos comunes y usuarios que registran, procesan
y extraen información de una base de datos relacional central.
* Paquetes. Son la unidad modular estructurada en la que se organizan físicamente los componentes de software.
* Conceptos comunes. Definen reglas, convenciones y el comportamiento esperado por todos los componentes de software para integrarse como un solo sistema.
### Paquetes
Un paquete está formado por programas, bibliotecas, esquemas, privilegios, datos y recursos.
### Programas
Un programa en V12 es una pieza de software con un punto de entrada que puede estar compuesto por uno o más archivos de código Devkron, imágenes, datos y otros recursos.
Los programas se clasifican en: Transacciones y Tareas.
#### Transacciones
Una transacción en V12 es un programa disponible para los usuarios autorizados.
Las transacciones reciben datos de entrada, los procesan, afectan a la base de datos y proporcionan una salida.
Las transacciones se clasifican en: Aplicaciones y Servicios
##### Aplicaciones
Las aplicaciones son programas con un propósito específico que proporcionan interfaz de usuario para que se introduzcan, consulten o afecten datos.
Las aplicaciones en V12 se construyen siguiendo el patrón MVC con el [marco de trabajo CRUD-L de Devkron](https://docs.induxsoft.net/es/devkron/Sitios-y-aplicaciones-Web-con-DKL/crudl.md), por lo que están formadas por una o más vistas, un modelo y un controlador.
###### Vistas
Las vistas son páginas Web (o pantallas) con las que interactúa el usuario, vea [Lineamientos generales de la Interfaz del Usuario](https://docs.induxsoft.net/es/productos/v12/devops/lineamientos-ui.md) para más información.
###### Modelo
Implementa las operaciones con datos de una aplicación.
###### Controlador
Es responsable de seleccionar la operación del modelo y entregar la vista apropiada.
##### Servicios
Los servicios son colecciones de operaciones disponibles a través de solicitudes HTTP que no ofrecen interfaz de usuario.
El marco CRUD-L de Devkron con el que se construyen las aplicaciones, automáticamente implementa un conjunto de operaciones básicas sobre entidades de datos estilo REST.
###### Operaciones
Una operación es un proceso atómico que recibe datos de entrada y devuelve datos de respuesta generalmente en JSON.
#### Tareas
Las tareas son programas que no están disponibles para ser ejecutados directamente por los usuarios.
Cada tarea es responsable de notificar o registrar su progreso, estado o finalización de ser necesario. Por lo que el invocador no tiene ningún control una vez que la ha iniciado.
##### Tarea bajo demanda
Es iniciada desde un servicio o un modelo de aplicación en respuesta a una acción invocada por un usuario.
###### Manejador de eventos
Es iniciado cuando un evento conocido (para el que está registrado) se dispara.
##### Tarea programada
Es iniciada automáticamente en intervalos de tiempo configurados.
### Bibliotecas
Son archivos de código fuente Devkron que contienen funciones comunes que pueden ser utilizadas por diferentes programas.
### Esquemas
Son archivos en DDM o JSON que contienen definiciones de entidades de la base de datos.
#### Entidad
Una entidad (entity) o tipo de elemento de datos (data element type) es una tabla de la base de datos que representa un concepto relevante del dominio del sistema.
### Privilegios
Archivos con listas de privilegios (permisos) conocidos por los programas.
Un privilegio es un identificador asociado a una operación del modelo o de los servicios que puede estar o no concedido a un grupo de usuarios.
### Datos
Archivos con información en cualquier formato que generalmente se importan a la base de datos durante la instalación, ya sean variables de configuración o información inicial.
### Recursos
Imágenes y otros archivos usados por los programas que generalmente están disponibles para descarga.
### Conceptos comunes
* Acción. Es la solicitud de un usuario desde una vista para que se realice un proceso.
* Operación. Es un proceso disponible a través de un servicio Web.
* Evento. Es el mensaje enviado por un proceso bajo ciertas condiciones previstas para que sea procesado por cualquier programa que implemente un controlador.
* Manejador de evento. Es el programa previsto para responder a un determinado evento.
* Notificación. Es un mensaje enviado por un proceso con la intención de informar al usuario.
* Variable. Es un par clave/valor almacenado en la base de datos que representa un parámetro de configuración global.
#### Resumen
Los usuarios interactúan con el sistema a través de acciones sobre las vistas de las aplicaciones que muestran, capturan o envían datos hacia un modelo que recupera o afecta los datos de entidades
persistentes en una base de datos relacional central.
Para que diferentes aplicaciones, servicios o tareas; incluso pertenecientes a distintos paquetes; puedan integrarse y funcionar de manera coherente sin dependencia,
se comunican entre sí a través de eventos y con el usuario mediante notificaciones.
En el backend (modelos, operaciones y tareas) usan variables para configuraciones, verifican privilegios, envían notificaciones al usuario, disparan y manejan eventos.