第8章 Application
第8章 Application 2026年09月12日 东塬一老翁 第三篇 SAI Framework Core第8章 Application本章大纲Application 定义Framework ApplicationApplication 生命周期Application 初始化Application 启动Application 运行Application 结束Application 与 IndividualApplication 与 CentralApplication 类设计完整 PHP 示例实际运行结果8.1 Application 定义在 SAI Framework 中Application 是整个框架运行过程的应用管理对象。它负责把已经定义好的Configuration↓Core↓Individual↓Central↓Modules组织起来并启动一次完整的 SAI 运行过程。因此 Application 不是CognitionReasoningDecision也不是 Individual 本身。它更接近Application 是 SAI Framework 的运行载体和生命周期管理对象。可以表示为Application│├── 初始化 Framework│├── 创建 / 加载 Individual│├── 启动 Central│├── 运行生命周期│└── 结束运行8.2 Framework Application普通 PHP 程序可能只是index.php↓执行代码↓输出结果而 Framework Application 会把整个程序组织起来Application↓Bootstrap↓Configuration↓Container↓Individual↓Central↓SAI Lifecycle因此 Application 的意义不是简单地$app new Application();而是建立一次完整的 Framework Runtime。8.3 Application 生命周期Application 本身也存在生命周期。可以设计为Created↓Initialized↓Started↓Running↓Stopping↓Stopped完整结构Application│▼Created│▼Initialize│▼Initialized│▼Start│▼Started│▼Run│▼Running│▼Stop│▼Stopped这与 Individual 的生命周期并不是完全相同的。例如Application↓管理 Framework Runtime而Individual↓执行模拟人工个体生命周期两者需要区分。8.4 Application 初始化Application 初始化阶段主要完成运行前准备。例如Application↓读取 Configuration↓创建 Container↓注册基础服务↓加载 Individual↓准备 Central可以理解为Initialize├── Configuration├── Container├── Core Services├── Individual└── Central例如配置$config array(name SAI Framework,version 0.1.0,debug true);Application 可以读取这些配置。8.5 Application 启动初始化完成后Application 进入启动阶段。例如Application↓initialize()↓start()启动过程中可以启动 Individual启动 Central启动必要 Engine准备运行环境例如$individual-start();Individual 状态created↓running8.6 Application 运行Application 启动后进入运行阶段。例如Application↓Central↓Information↓Perception↓Cognition↓Memory↓Reasoning↓Decision↓BehaviorApplication 本身不应该实现这些认知机制。它负责让这些模块按照生命周期进入运行状态。可以理解为Application 运行管理者Central 内部协调中心Individual 模拟人工个体8.7 Application 结束Application 结束时需要让运行中的对象有序停止。例如Running↓Stopping↓Stop Individual↓Stop Central↓Release Runtime↓Stopped例如$individual-stop();Individualrunning↓stopped结束阶段可以处理日志运行状态缓存资源释放设备断开运行数据保存具体保存机制由相应模块负责而不是由 Application 把所有逻辑写进去。8.8 Application 与 IndividualApplication 与 Individual 是两个不同层级。可以表示为Application│▼IndividualApplication 负责创建加载启动运行停止Individual 负责IdentityStateAbilityMemoryCognitionLearningBehavior因此Application≠Individual例如一个 Application Runtime 可以管理一个或多个 IndividualApplication│├── Individual A├── Individual B└── Individual C是否允许多个 Individual则由具体 Framework 架构决定。在最简单的 SAI 示例中可以先采用Application│└── Individual8.9 Application 与 CentralApplication 与 Central 也不能混淆。两者关系Application│▼Individual│▼CentralApplication 负责 Framework Runtime。Central 负责 Individual 内部协调。例如Application││ start▼Individual││ run▼Central│├── Perception├── Cognition├── Memory├── Reasoning├── Decision└── Behavior所以Application回答Framework 怎么启动和运行Central回答Individual 内部各模块如何协调运行8.10 Application 类设计一个简单的 Application 可以设计为?phpnamespace SAI\Core;class Application{protected $config;protected $individual;protected $central;protected $state;public function __construct(array $config,$individual,$central) {$this-config $config;$this-individual $individual;$this-central $central;$this-state created;}public function initialize(){$this-state initialized;}public function start(){$this-individual-start();$this-state started;}public function run(){$this-central-run();$this-state running;}public function stop(){$this-individual-stop();$this-state stopped;}public function getState(){return $this-state;}}这个 Application 的职责非常明确initialize()↓start()↓run()↓stop()它没有把CognitionReasoningDecisionMemory全部塞进去。这符合模块化设计。8.11 Individual 类为了配合 Application需要一个简单的 Individual。?phpnamespace SAI\Individual;class Individual{protected $id;protected $name;protected $state;public function __construct($id, $name){$this-id $id;$this-name $name;$this-state created;}public function start(){$this-state running;}public function stop(){$this-state stopped;}public function getId(){return $this-id;}public function getName(){return $this-name;}public function getState(){return $this-state;}}8.12 Central 类再建立一个最简单的 Central。?phpnamespace SAI\Central;class Central{protected $state;public function __construct(){$this-state created;}public function run(){$this-state running;}public function stop(){$this-state stopped;}public function getState(){return $this-state;}}这里暂时没有加入真正的PerceptionCognitionMemoryReasoningDecisionBehavior因为本章重点只是Application 如何管理 Framework Runtime。8.13 Application 三者关系现在Application│▼Individual│▼Central对应 PHP$central new Central();$individual new Individual(sai_001,Indoor SAI);$app new Application($config,$individual,$central);Application 持有$config$individual$central形成 Composition / Dependency。8.14 Application 生命周期实现执行$app-initialize();状态created↓initialized然后$app-start();状态initialized↓started同时 Individualcreated↓running然后$app-run();Applicationstarted↓runningCentralcreated↓running最后$app-stop();Applicationrunning↓stoppedIndividualrunning↓stopped8.15 完整 PHP 示例下面把前面的类组合成一个完整的教程运行示例。目录可以暂时设计为sai-application-demo/│├── app/│ ├── Core/│ │ └── Application.php│ ││ ├── Individual/│ │ └── Individual.php│ ││ └── Central/│ └── Central.php│├── config/│ └── app.php│├── bootstrap.php└── index.phpconfig/app.php?phpreturn array(name SAI Framework,version 0.1.0,debug true);bootstrap.php?phperror_reporting(E_ALL);ini_set(display_errors, 1);spl_autoload_register(function ($class) {$prefix SAI\\;if (strpos($class, $prefix) ! 0) {return;}$relative substr($class, strlen($prefix));$file __DIR__. /app/. str_replace(\\, /, $relative). .php;if (is_file($file)) {require_once $file;}});app/Core/Application.php?phpnamespace SAI\Core;class Application{protected $config;protected $individual;protected $central;protected $state;public function __construct(array $config,$individual,$central) {$this-config $config;$this-individual $individual;$this-central $central;$this-state created;}public function initialize(){$this-state initialized;}public function start(){$this-individual-start();$this-state started;}public function run(){$this-central-run();$this-state running;}public function stop(){$this-central-stop();$this-individual-stop();$this-state stopped;}public function getState(){return $this-state;}}app/Individual/Individual.php?phpnamespace SAI\Individual;class Individual{protected $id;protected $name;protected $state;public function __construct($id, $name){$this-id $id;$this-name $name;$this-state created;}public function start(){$this-state running;}public function stop(){$this-state stopped;}public function getId(){return $this-id;}public function getName(){return $this-name;}public function getState(){return $this-state;}}app/Central/Central.php?phpnamespace SAI\Central;class Central{protected $state;public function __construct(){$this-state created;}public function run(){$this-state running;}public function stop(){$this-state stopped;}public function getState(){return $this-state;}}index.php?phprequire_once __DIR__ . /bootstrap.php;use SAI\Core\Application;use SAI\Individual\Individual;use SAI\Central\Central;$config require __DIR__ . /config/app.php;$individual new Individual(sai_001,Indoor SAI);$central new Central();$app new Application($config,$individual,$central);$app-initialize();$app-start();$app-run();echo pre;echo Framework: . $config[name]. PHP_EOL;echo Version: . $config[version]. PHP_EOL;echo Application State: . $app-getState(). PHP_EOL;echo Individual ID: . $individual-getId(). PHP_EOL;echo Individual Name: . $individual-getName(). PHP_EOL;echo Individual State: . $individual-getState(). PHP_EOL;echo Central State: . $central-getState(). PHP_EOL;$app-stop();echo PHP_EOL;echo After Stop: . PHP_EOL;echo Application State: . $app-getState(). PHP_EOL;echo Individual State: . $individual-getState(). PHP_EOL;echo Central State: . $central-getState(). PHP_EOL;echo /pre;8.16 实际运行流程执行index.php首先bootstrap.php注册 Autoload。然后config/app.php加载配置。然后创建IndividualCentralApplication之后$app-initialize()得到Applicationcreated↓initialized继续$app-start()得到Application startedIndividual running继续$app-run()得到Application runningCentral running最后$app-stop()得到Application stoppedIndividual stoppedCentral stopped8.17 预期运行结果如果按照本章示例建立对应文件并且 PHP 环境正常预期可以看到类似Framework: SAI FrameworkVersion: 0.1.0Application State: runningIndividual ID: sai_001Individual Name: Indoor SAIIndividual State: runningCentral State: runningAfter Stop:Application State: stoppedIndividual State: stoppedCentral State: stopped这里的“预期运行结果”是根据示例代码推导出的结果不是本次实际执行验证结果。如果以后真正建立项目需要通过实际 PHP CLI 或 Web 环境执行验证后才能称为“实际运行结果”。8.18 Application 与完整 SAI 生命周期目前的 Application 示例还比较简单Application↓Individual↓Central随着后续章节加入 SAI 模块它可以逐步扩展为Application│▼Individual│▼Central│├── Information│├── Scene│├── Perception│├── Cognition│├── Memory│├── Reasoning│├── Decision│├── Behavior│├── Feedback│├── Experience│└── Learning因此 Application 不需要不断增加认知代码。它只需要保持Application↓Runtime Management↓Individual↓Central↓SAI Modules8.19 Application 的核心职责边界可以把 Application 的职责总结为Application├── Configuration├── Initialization├── Startup├── Runtime├── Shutdown└── Resource Lifecycle而不应该承担Application├── Cognition├── Reasoning├── Decision├── Learning└── Behavior Logic这些属于 Individual 内部的模块。这条边界非常重要。否则最终很容易形成一个巨大的Application.php里面包含整个 SAI Framework 的所有代码。那就失去了模块化设计的意义。8.20 本章结构总结SAI Framework 的运行层次可以表示为Application│Framework Runtime│▼Individual│▼Central│┌─────────────────┼─────────────────┐▼ ▼ ▼Information Cognition Memory│ │ │└─────────────────┼─────────────────┘▼Reasoning│▼Decision│▼Behavior│▼Action│▼Feedback│▼Experience│▼Learning因此Application 管理 Framework 的运行生命周期Individual 是模拟人工个体Central 是 Individual 的内部协调中心各 SAI Engine 和模块负责具体能力。本章小结第8章建立了 SAI Framework 的第一个真正的运行管理层。核心关系是Application↓初始化 Framework↓启动 Individual↓运行 Central↓执行 SAI 生命周期↓停止 Individual↓结束 FrameworkApplication 生命周期Created↓Initialized↓Started↓Running↓Stopping↓Stopped三者关系Application││ 管理运行▼Individual││ 内部协调▼Central│├── Cognition├── Memory├── Reasoning├── Decision├── Behavior└── Learning因此可以形成一句非常重要的架构定义Application 不等于 IndividualCentral 也不等于 Application。Application 管理 Framework RuntimeIndividual 表示模拟人工个体Central 负责 Individual 内部模块协调。下一章进入 第9章 Bootstrap 时就可以进一步解决一个问题Application 从哪里来↓谁负责启动 Application↓Configuration 如何加载↓Autoload 如何建立↓Container 如何初始化↓Framework 如何正式进入运行状态这就会把 Bootstrap → Application → Individual → Central 这一条 SAI Framework 基础启动链完整建立起来。