返回首页

LOTIS PHP 框架:使用对象代替 DOM 和异步调用

LOTIS 框架架构分析,经过 10 年开发构建。描述 CMA (Construct-Metadata-Assembly) 原则,用对象模型取代 DOM 和异步调用。来自真实应用程序的代码示例以及该方法对业务任务的优势。

LOTIS:无 DOM 和 Promise 的 PHP — 它是如何工作的?
Advertisement 728x90

# LOTIS:用对象取代 DOM 和异步调用的 PHP 框架

经过十年开发,LOTIS 框架的作者想出了一个激进的解决方案:摒弃标签和异步请求,转而采用面向对象的方法。结果呢?将 Web 应用构建成一个统一的整体,而无需将客户端与服务器分离。开发者使用领域对象而非 DOM 元素工作,大大缩短了实现业务逻辑所需的时间。

CMA 概念:从对象到元数据

LOTIS 架构的基础是 CMA 原则(构造-元数据-组装)。应用完全由实现基础 Construct 接口的对象构建而成。每个对象生成用于构建界面、启用响应性或创建 API 的元数据。关键组件是 Space 类,它从这些对象中组装 Web 应用。

与传统框架将标记与逻辑分离不同,LOTIS 允许你:

Google AdInline article slot
  • 通过 PHP 对象描述 UI
  • 在客户端和服务器上使用相同的变量
  • 跳过手动异步操作处理
  • 通过继承动态更改组件层次结构

最小工作示例展示了本质:

$div = LTS::Div()->capt("Hello from LOTIS!");
LTS::Space()->build($div);

这里,LTS::Div() 创建一个对象,而不是 HTML 标签。只有将对象传递给 Space 时才会进行 DOM 转换。这让你可以像经典桌面框架一样自由操纵应用结构。

实际案例:“Tracker” 记账系统

考虑这个来自库存跟踪和工资计算工作应用的代码片段。LOTIS 以紧凑的方式描述复杂逻辑,无需模板或 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;
});

注意文档保存处理:业务逻辑(如工资累积)被捕获在一个块中,无需客户端-服务器分离。JavaScript 钩子通过如 table->out() 等方法集成,无需异步模式专业知识。

开发者的优势

LOTIS 解决了传统 Web 开发中的三个核心问题:

  • 消除逻辑重复 — 数据检查和转换在对象中定义一次,而不是散布在 JS 和 PHP 模块中
  • 降低架构复杂性 — 无需设计 API 或管理加载状态
  • 统一数据模型 — 对象更改通过元数据自动在客户端和服务器之间同步

它特别适合紧迫期限的项目:标准操作(表单、表格、验证)只需 3-5 行,而不是数十行。灵活性依然存在 — JS 钩子让你自定义任何内容,比如这个日期格式化:

Google AdInline article slot
$maindiv->table->out(<<<JS
function (row, obj) {
    row.find('td.Column_date').text(obj.date.substr(0, 10));
}
JS);

关键点

  • LOTIS 通过生成元数据的对象模型模糊了客户端-服务器界限
  • 开发使用纯 PHP,无模板,但可以嵌入 JS 逻辑
  • 在例行任务上节省时间:AJAX、验证、状态同步
  • CMA 让相同对象服务于 UI、API 或离线模式
  • Node.js 端口启用 PWA 和本地应用同步

当前实现针对速度关键的业务应用。下一个主要版本将添加 TypeScript 支持,并更好地与现代构建工具集成。对于厌倦了 DOM 包装器和 Promise 链的开发者,LOTIS 带来了 OOP 的简单性,而不牺牲 Web 能力。

— Editorial Team

Advertisement 728x90

继续阅读