Volver al inicio

Framework LOTIS PHP: objetos en lugar de DOM y llamadas asíncronas

Análisis de la arquitectura del framework LOTIS, construida durante más de 10 años de desarrollo. Describe el principio CMA (Construct-Metadata-Assembly), que reemplaza DOM y llamadas asíncronas con un modelo de objetos. Ejemplos de código de una aplicación real y ventajas del enfoque para tareas empresariales.

LOTIS: PHP sin DOM y Promise — ¿cómo funciona?
Advertisement 728x90

# 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:

Google AdInline article slot
  • 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:

Google AdInline article slot
$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:

Google AdInline article slot
$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

Advertisement 728x90

Leer después