LOTIS : Framework PHP remplaçant le DOM et les appels asynchrones par des objets
Après dix ans de développement, l'auteur du framework LOTIS est arrivé à une solution radicale : abandonner les balises et les requêtes asynchrones au profit d'une approche orientée objet. Le résultat ? Construire des applications web comme un tout unifié, sans séparer le client du serveur. Les développeurs travaillent avec des objets de domaine au lieu d'éléments DOM, réduisant drastiquement le temps nécessaire pour implémenter la logique métier.
Concept CMA : Des objets aux métadonnées
La base de l'architecture LOTIS repose sur le principe CMA (Construct-Metadata-Assembly). Les applications sont construites entièrement à partir d'objets implémentant l'interface de base Construct. Chaque objet génère des métadonnées utilisées pour construire les interfaces, activer la réactivité ou créer des API. Le composant clé est la classe Space, qui assemble l'application web à partir de ces objets.
Contrairement aux frameworks traditionnels qui séparent le markup de la logique, LOTIS vous permet de :
- Décrire l'UI via des objets PHP
- Utiliser les mêmes variables côté client et serveur
- Éviter la gestion manuelle des opérations asynchrones
- Modifier dynamiquement les hiérarchies de composants via l'héritage
Un exemple minimal fonctionnel illustre l'essentiel :
$div = LTS::Div()->capt("Hello from LOTIS!");
LTS::Space()->build($div);
Ici, LTS::Div() crée un objet, pas une balise HTML. La conversion DOM n'intervient qu'au passage de l'objet à Space. Cela permet de manipuler la structure de l'application avec la liberté des frameworks desktop classiques.
Cas réel : Système comptable « Tracker »
Considérez cet extrait de code d'une application fonctionnelle pour le suivi des stocks et les calculs de paie. LOTIS décrit une logique complexe de manière compacte, sans templates ni appels 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;
});
Remarquez la gestion de l'enregistrement du document : la logique métier (comme l'accréditation de paie) est capturée en un seul bloc, sans séparation client-serveur. Les hooks JavaScript s'intègrent via des méthodes comme table->out(), sans expertise requise en patterns asynchrones.
Avantages pour les développeurs
LOTIS résout trois problèmes fondamentaux du développement web traditionnel :
- Élimination de la duplication de logique — les vérifications et transformations de données sont définies une seule fois dans les objets, et non dispersées entre modules JS et PHP
- Réduction de la complexité architecturale — pas besoin de concevoir des API ou de gérer les états de chargement
- Modèle de données unifié — les changements d'objets se synchronisent automatiquement entre client et serveur via les métadonnées
C'est particulièrement précieux pour les projets à délai serré : les opérations standard (formulaires, tableaux, validation) ne prennent que 3-5 lignes au lieu de dizaines. La flexibilité est préservée — les hooks JS permettent de personnaliser tout ce qu'on veut, comme ce formatage de date :
$maindiv->table->out(<<<JS
function (row, obj) {
row.find('td.Column_date').text(obj.date.substr(0, 10));
}
JS);
Points clés
- LOTIS efface la frontière client-serveur avec un modèle d'objets générant des métadonnées
- Le développement utilise du PHP pur, sans templates, mais la logique JS peut être intégrée
- Économise du temps sur les tâches routinières : AJAX, validation, synchronisation d'état
- CMA permet aux mêmes objets de servir l'UI, l'API ou le mode hors ligne
- Le port Node.js active les PWAs et applications locales avec synchronisation
L'implémentation actuelle vise les applications métier où la rapidité prime. La prochaine version majeure ajoute le support TypeScript et une meilleure intégration avec les outils de build modernes. Pour les développeurs lassés des wrappers DOM et des chaînes de Promise, LOTIS restaure la simplicité OOP sans sacrifier les capacités web.
— Editorial Team
Aucun commentaire pour le moment.