# LOTIS: Framework de PHP que sustituye el DOM y las llamadas asíncronas por objetos
Después de diez años de desarrollo, el autor del framework LOTIS llegó a una solución radical: abandonar las etiquetas y las solicitudes asíncronas en favor de un enfoque orientado a objetos. ¿El resultado? Construir aplicaciones web como un todo unificado, sin separar cliente de servidor. Los desarrolladores trabajan con objetos de dominio en lugar de elementos DOM, reduciendo drásticamente el tiempo necesario para implementar la lógica de negocio.
Concepto CMA: De objetos a metadatos
La base de la arquitectura de LOTIS es el principio CMA (Construct-Metadata-Assembly). Las aplicaciones se construyen completamente a partir de objetos que implementan la interfaz base Construct. Cada objeto genera metadatos utilizados para construir interfaces, habilitar reactividad o crear APIs. El componente clave es la clase Space, que ensambla la aplicación web a partir de estos objetos.
A diferencia de los frameworks tradicionales que separan el marcado de la lógica, LOTIS te permite:
- Describir la UI a través de objetos PHP
- Usar las mismas variables en cliente y servidor
- Omitir el manejo manual de operaciones asíncronas
- Alterar dinámicamente las jerarquías de componentes mediante herencia
Un ejemplo mínimo funcional muestra la esencia:
$div = LTS::Div()->capt("Hello from LOTIS!");
LTS::Space()->build($div);
Aquí, LTS::Div() crea un objeto, no una etiqueta HTML. La conversión a DOM ocurre solo al pasar el objeto a Space. Esto te permite manipular la estructura de la app con la libertad de los frameworks de escritorio clásicos.
Caso real: Sistema contable «Tracker»
Considera este fragmento de código de una app funcional para seguimiento de inventario y cálculos de nómina. LOTIS describe la lógica compleja de forma compacta, sin plantillas ni llamadas AJAX:
$maindiv = LTS::DataView();
$maindiv->bindtodb($kassa, [
'head' => ['sel' => '', 'date' => 'Date'],
'inputs' => [
['name' => 'id', 'type' => 'hidden'],
['name' => 'date', 'type' => 'date', 'caption' => 'Date'],
['name' => 'save', 'caption' => 'Write', 'type' => 'button'],
['name' => 'close', 'caption' => 'Cancel', 'type' => 'button']
],
'cells' => ['save, close', 'date']
]);
$subtable = $maindiv->subtable('kassasubtable', $kassatable, [
'head' => [
'sel' => '',
'name' => 'Employee',
'pay' => 'Received',
'del' => ''
],
'inputs' => [
['name' => 'user', 'type' => 'table', 'dbtable' => $users, 'caption' => 'Employee'],
['name' => 'message', 'caption' => 'Onwartość'],
['name' => 'pay', 'type' => 'numeric', 'caption' => 'Issued']
]
]);
$maindiv->onsave(function ($args, $result) {
global $money, $users;
$paytable = $args['subtables']['kassasubtable'];
$stock = LTS::Stock($money);
$stock->collector($users, 'user', ['total' => 'pay']);
$stock->update(['doc' => $result['data']['id']], $paytable);
return $result;
});
Observa el manejo de guardado del documento: la lógica de negocio (como el devengo de nómina) se captura en un bloque, sin división cliente-servidor. Los ganchos de JavaScript se integran mediante métodos como table->out(), sin necesidad de ser experto en patrones asíncronos.
Ventajas para los desarrolladores
LOTIS aborda tres problemas fundamentales en el desarrollo web tradicional:
- Eliminar la duplicación de lógica — las verificaciones y transformaciones de datos se definen una vez en objetos, no dispersas en módulos JS y PHP
- Reducir la complejidad de la arquitectura — no es necesario diseñar APIs ni gestionar estados de carga
- Modelo de datos unificado — los cambios en objetos se sincronizan automáticamente entre cliente y servidor mediante metadatos
Es especialmente valioso para proyectos con plazos ajustados: las operaciones estándar (formularios, tablas, validación) toman 3-5 líneas en lugar de docenas. La flexibilidad se mantiene — los ganchos JS te permiten personalizar cualquier cosa, como este formateo de fecha:
$maindiv->table->out(<<<JS
function (row, obj) {
row.find('td.Column_date').text(obj.date.substr(0, 10));
}
JS);
Puntos clave
- LOTIS difumina la línea cliente-servidor con un modelo de objetos que genera metadatos
- El desarrollo usa PHP puro, sin plantillas, pero la lógica JS puede incrustarse
- Ahorra tiempo en tareas rutinarias: AJAX, validación, sincronización de estado
- CMA permite que los mismos objetos sirvan para UI, API o modo offline
- El puerto a Node.js habilita PWAs y apps locales con sincronización
La implementación actual apunta a aplicaciones empresariales donde la velocidad es clave. La próxima versión principal añade soporte para TypeScript y mejor integración con herramientas de construcción modernas. Para desarrolladores hartos de envoltorios DOM y cadenas de Promise, LOTIS recupera la simplicidad OOP sin sacrificar las capacidades web.
— Editorial Team
Aún no hay comentarios.