首页 理论 架构 工程 文档 白皮书 著作 研究 案例 下载 博客 关于 开始使用 →

第二十三篇 Extension

第二十三篇 Extension

第76章 Extension

随着 ICAI 的感知、认知、记忆、推理、决策、行为、行动、表达、自维护等机制不断增加,系统本身会形成越来越多的功能模块。

如果所有功能都直接写入 ICAI 核心,就会产生一个问题:

功能增加
   ↓
核心代码不断增加
   ↓
模块之间耦合
   ↓
修改一个功能影响其他功能
   ↓
维护困难

因此需要 Extension(扩展机制)

Extension 的核心思想是:

核心保持稳定,功能通过标准接口进入系统。

基本结构:

ICAI Core
    │
    ├── Extension A
    ├── Extension B
    ├── Extension C
    └── Extension D

Extension 不是新的认知核心,也不是新的智能机制。

它只是 ICAI 的功能扩展机制


1. Extension 定义

Extension,即扩展,是 ICAI 在保持核心结构相对稳定的情况下,通过标准接口增加、加载、管理和移除外部功能模块的机制。

其基本关系:

Core
  ↓
Extension Interface
  ↓
Extension
  ↓
Additional Function

Extension 可以扩展:

  • Perception
  • Cognition
  • Memory
  • Reasoning
  • Decision
  • Behavior
  • Action
  • Expression
  • Device
  • Detection
  • Diagnosis
  • Repair
  • Verification
  • Storage
  • Communication
  • Data Processing

例如:

ICAI
 ├── Core
 ├── DetectionExtension
 ├── DeviceExtension
 ├── MemoryExtension
 └── RepairExtension

Extension 本身不是 ICAI Core。

因此:

Extension ≠ Core
Extension ≠ Engine
Extension ≠ Module
Extension ≠ Capability

可以理解为:

Core
    = 系统核心

Module
    = 系统内部功能模块

Extension
    = 可以按照标准接口增加或移除的扩展功能

2. 为什么需要 Extension

2.1 降低核心耦合

如果所有功能直接进入核心:

Core
 ├── Device
 ├── Repair
 ├── Detection
 ├── File
 ├── Network
 ├── Sensor
 ├── Storage
 └── ...

核心会越来越复杂。

采用 Extension 后:

Core
   ↓
ExtensionManager
   ↓
Extensions

核心只负责管理扩展,不需要知道每个扩展内部的全部实现。


2.2 增加新功能

例如原来的 ICAI 没有温度设备支持。

可以增加:

TemperatureDeviceExtension

而不必修改整个 Cognition、Reasoning、Decision 核心。


2.3 独立维护

每个 Extension 可以拥有自己的:

Class
Method
Configuration
Data
State
Dependency

例如:

extensions/
├── DetectionExtension/
├── DeviceExtension/
├── MemoryExtension/
└── RepairExtension/

这样可以减少不同功能之间的直接依赖。


2.4 可加载

系统启动时可以:

Registry
   ↓
Find Extension
   ↓
Validate
   ↓
Load
   ↓
Initialize

不需要把所有扩展永久写死在 Core 中。


2.5 可卸载

某个 Extension 不再需要时:

Extension
   ↓
Stop
   ↓
Unload
   ↓
Registry Update

从而减少对核心系统的影响。


2.6 有利于自维护

Extension 本身也可以成为 Detection 的对象。

例如:

Detection
    ↓
Extension_A
    ↓
state = ERROR
    ↓
Diagnosis
    ↓
Repair
    ↓
Verification

因此 Extension 可以进入 ICAI 的自维护体系。


3. Extension Interface

Extension Interface 是扩展机制的标准接口。

它规定一个 Extension 至少应该具备哪些基本能力。

例如使用 PHP OOP:

interface ExtensionInterface
{
    public function getId();

    public function getName();

    public function getVersion();

    public function load();

    public function start();

    public function stop();

    public function unload();

    public function getState();
}

这样,ExtensionManager 不需要知道具体 Extension 的内部代码。

例如:

class DetectionExtension implements ExtensionInterface
{
    protected $state = 'NEW';

    public function getId()
    {
        return 'detection';
    }

    public function getName()
    {
        return 'Detection Extension';
    }

    public function getVersion()
    {
        return '1.0.0';
    }

    public function load()
    {
        $this->state = 'LOADED';
        return true;
    }

    public function start()
    {
        $this->state = 'ACTIVE';
        return true;
    }

    public function stop()
    {
        $this->state = 'STOPPED';
        return true;
    }

    public function unload()
    {
        $this->state = 'UNLOADED';
        return true;
    }

    public function getState()
    {
        return $this->state;
    }
}

接口的意义是:

不同 Extension
       ↓
统一 Interface
       ↓
统一 Manager

4. Extension Manager

Extension Manager 是 Extension 的运行管理器。

它负责:

  • 注册
  • 查找
  • 加载
  • 初始化
  • 启动
  • 停止
  • 卸载
  • 状态管理

基本结构:

ExtensionManager
{
    Registry
    Loader
    Extensions
    DependencyChecker
    StateManager
}

一个简单的 PHP OOP 示例:

class ExtensionManager
{
    protected $extensions = array();

    public function register(ExtensionInterface $extension)
    {
        $id = $extension->getId();

        $this->extensions[$id] = $extension;

        return true;
    }

    public function get($id)
    {
        if (!isset($this->extensions[$id])) {
            return null;
        }

        return $this->extensions[$id];
    }

    public function load($id)
    {
        $extension = $this->get($id);

        if (!$extension) {
            return false;
        }

        return $extension->load();
    }

    public function start($id)
    {
        $extension = $this->get($id);

        if (!$extension) {
            return false;
        }

        return $extension->start();
    }

    public function stop($id)
    {
        $extension = $this->get($id);

        if (!$extension) {
            return false;
        }

        return $extension->stop();
    }

    public function unload($id)
    {
        $extension = $this->get($id);

        if (!$extension) {
            return false;
        }

        $result = $extension->unload();

        if ($result) {
            unset($this->extensions[$id]);
        }

        return $result;
    }
}

Manager 的职责是管理 Extension 生命周期,而不是实现 Extension 的具体业务功能。

因此:

Extension
    = 功能

ExtensionManager
    = 管理功能

5. Extension Registry

Extension Registry,即扩展注册表,用于记录系统中有哪些 Extension,以及它们的基本信息。

基本结构:

ExtensionRegistry
{
    id
    name
    version
    class
    path
    type
    dependencies
    state
    enabled
    configuration
}

例如:

{
    "id": "detection",
    "name": "Detection Extension",
    "version": "1.0.0",
    "class": "DetectionExtension",
    "path": "extensions/DetectionExtension.php",
    "type": "system",
    "dependencies": [],
    "state": "ACTIVE",
    "enabled": true
}

Registry 的作用是:

记录
 ↓
查找
 ↓
判断
 ↓
加载

它本身并不执行 Extension。

因此:

Registry ≠ Extension
Registry ≠ Manager

三者关系:

Registry
   ↓
记录有哪些 Extension

Manager
   ↓
管理 Extension

Extension
   ↓
执行具体扩展功能

5.1 注册

例如:

$manager->register(
    new DetectionExtension()
);

注册以后:

ExtensionManager
        ↓
DetectionExtension

5.2 查询

$extension = $manager->get('detection');

如果不存在:

NULL

而不是假定 Extension 一定存在。


6. Extension 生命周期

Extension 必须具有明确生命周期。

基本生命周期:

NEW
 ↓
REGISTERED
 ↓
LOADED
 ↓
INITIALIZED
 ↓
ACTIVE
 ↓
STOPPED
 ↓
UNLOADED

异常状态可以包括:

ERROR
DISABLED
INVALID
CONFLICT

6.1 NEW

Extension 对象已经创建:

Extension
state = NEW

此时还没有正式进入系统运行环境。


6.2 REGISTERED

Extension 被 Registry / Manager 注册:

NEW
 ↓
REGISTERED

6.3 LOADED

系统成功加载 Extension:

REGISTERED
 ↓
LOADED

加载通常包括:

  • 类文件
  • 配置
  • 基础资源
  • 必要依赖

6.4 INITIALIZED

加载完成后进行初始化:

LOADED
 ↓
INITIALIZED

初始化可以建立:

  • 内部对象
  • 配置
  • 数据结构
  • 服务关系

6.5 ACTIVE

Extension 正式运行:

INITIALIZED
 ↓
ACTIVE

6.6 STOPPED

Extension 被停止:

ACTIVE
 ↓
STOPPED

停止不等于卸载。


6.7 UNLOADED

Extension 从运行环境中移除:

STOPPED
 ↓
UNLOADED

7. Extension 加载

Extension Loading 是把注册的 Extension 从定义状态转换为可运行状态的过程。

基本流程:

Registry
   ↓
Read Extension
   ↓
Check File
   ↓
Check Class
   ↓
Check Interface
   ↓
Check Dependency
   ↓
Load
   ↓
Initialize
   ↓
Start
   ↓
ACTIVE

7.1 检查文件

首先确认:

path

是否存在。

不存在:

LOAD FAILED

7.2 检查 Class

确认类是否存在:

class_exists($className)

不存在:

INVALID

7.3 检查 Interface

必须确认:

Extension
implements
ExtensionInterface

否则不能作为标准 Extension 加载。


7.4 检查依赖

例如:

DeviceExtension
depends_on
CommunicationExtension

如果:

CommunicationExtension = NOT_AVAILABLE

则:

DeviceExtension
LOAD BLOCKED

不能假定依赖已经存在。


7.5 加载与启动

依赖检查通过后:

Load
 ↓
Initialize
 ↓
Start
 ↓
ACTIVE

只有真正成功以后,Registry 才应该记录:

state = ACTIVE

8. Extension 卸载

Extension Unloading 是将 Extension 从系统运行环境中安全移除的过程。

基本流程:

ACTIVE
   ↓
Check Usage
   ↓
Stop
   ↓
Release Resource
   ↓
Remove Runtime Reference
   ↓
Registry Update
   ↓
UNLOADED

8.1 检查使用状态

如果:

DeviceExtension

仍然有:

Device_A
Device_B
Device_C

正在使用它,就不能简单执行:

unset($extension);

必须先检查依赖和运行对象。


8.2 停止 Extension

ACTIVE
 ↓
STOP
 ↓
STOPPED

停止以后不应该再接受新的运行任务。


8.3 释放资源

Extension 可能拥有:

  • 文件句柄
  • 数据连接
  • 设备连接
  • 临时对象
  • 内存数据
  • 注册事件
  • 定时任务

卸载前需要释放这些资源。


8.4 移除运行引用

完成资源释放后:

ExtensionManager
       ↓
Remove Reference

然后更新 Registry:

state = UNLOADED

8.5 卸载失败

如果停止失败:

ACTIVE
 ↓
STOP FAILED

不能直接标记:

UNLOADED

应该保持:

state = ERROR

并进入:

Detection
    ↓
Diagnosis
    ↓
Repair
    ↓
Verification

这样 Extension 生命周期也可以纳入 ICAI 自维护体系。


本章核心模型

Extension Registry
        ↓
Extension Manager
        ↓
Extension Interface
        ↓
Extension
        ↓
Load
        ↓
Initialize
        ↓
Active
        ↓
Stop
        ↓
Unload

完整关系:

                ICAI Core
                    │
             ExtensionManager
                    │
             ExtensionRegistry
                    │
          ┌─────────┼─────────┐
          ↓         ↓         ↓
     Extension A Extension B Extension C
          │         │         │
       Function   Function   Function

本章核心定义

Extension

Extension 是 ICAI 在保持核心结构稳定的基础上,通过标准接口增加、加载、管理和移除外部功能的扩展机制。

Extension Interface

Extension Interface 是规定扩展基本结构和生命周期行为的标准接口。

Extension Manager

Extension Manager 是负责 Extension 注册、查找、加载、启动、停止、卸载和状态管理的管理组件。

Extension Registry

Extension Registry 是记录 Extension 身份、版本、路径、类型、依赖、状态和配置等信息的注册结构。

最终形成:

Core
 ↓
Extension Interface
 ↓
Extension Registry
 ↓
Extension Manager
 ↓
Load / Initialize / Start
 ↓
Extension
 ↓
Function
 ↓
Stop / Unload

而 Extension 与前面建立的自维护机制可以进一步连接:

Extension
   ↓
Detection
   ↓
Risk / Conflict
   ↓
Diagnosis
   ↓
Repair
   ↓
Verification
   ↓
Extension Continue

因此,Extension 解决的是“系统如何增加和移除功能”,而不是“系统如何产生认知”。

Leave a Reply

Your email address will not be published. Required fields are marked *