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

第225章 DiagnosisRepairRepository——异常、诊断、修复与验证

第225章 DiagnosisRepairRepository——异常、诊断、修复与验证

225.1 DiagnosisRepairRepository定义

在 ICAI 体系中,异常处理不是一个单独的数据对象,而是一条完整的认知处理链:

Abnormality→Diagnosis→Repair→VerificationAbnormality \rightarrow Diagnosis \rightarrow Repair \rightarrow Verification

其中:

  • Abnormality(异常):描述系统发现的实际偏离;
  • Diagnosis(诊断):分析异常产生的原因;
  • Repair(修复):根据诊断结果形成并执行处理;
  • Verification(验证):判断修复是否真正达到预期结果。

第204章已经建立 DiagnosisEngine,第206章已经建立 RepairEngine。本章进一步建立:

DiagnosisRepairRepositoryDiagnosisRepairRepository

负责将上述过程产生的 Domain Object 持久化到数据库,并提供后续查询和历史追踪能力。

其基本模型为:

DRR=(A,D,R,V,H,Q,P,T)DRR=(A,D,R,V,H,Q,P,T)

其中:

  • AA:Abnormality;
  • DD:Diagnosis;
  • RR:Repair;
  • VV:Verification;
  • HH:History;
  • QQ:Query;
  • PP:Persistence;
  • TT:Time。

因此:

DiagnosisRepairRepository=Abnormality+Diagnosis+Repair+Verification+History+Query+PersistenceDiagnosisRepairRepository = Abnormality + Diagnosis + Repair + Verification + History + Query + Persistence

Repository 的核心问题不是:

如何发现异常?

也不是:

如何分析原因?

更不是:

如何选择修复方法?

而是:

已经计算出来的异常、诊断、修复和验证数据如何可靠保存、读取、更新和追踪。


225.2 Repository与四类Domain Object

四类对象必须保持独立。

Abnormality
    ↓
Diagnosis
    ↓
Repair
    ↓
Verification

其含义分别是:

异常:
发生了什么?

诊断:
为什么发生?

修复:
采取了什么处理?

验证:
处理之后是否真正恢复?

因此:

Abnormality≠DiagnosisAbnormality \neq Diagnosis Diagnosis≠RepairDiagnosis \neq Repair Repair≠VerificationRepair \neq Verification

同时:

Verification≠RepairStateVerification \neq RepairState

验证是一条独立的事实记录,而不能简单地把:

repair.state = verified

作为唯一验证信息。


225.3 Domain Object与Persistence Object

本章继续采用前面 Repository 体系已经确定的映射原则:

DomainObject≠DatabaseRowDomainObject \neq DatabaseRow

正确结构:

Domain Object
      ↓
Mapper
      ↓
Persistence Data
      ↓
Repository
      ↓
PDO
      ↓
MySQL

读取:

MySQL
   ↓
PDO
   ↓
Repository
   ↓
Persistence Data
   ↓
Mapper
   ↓
Domain Object

因此数据库字段不能直接等同于 Domain 属性。

同时需要区分:

DomainID≠PersistenceIDDomainID \neq PersistenceID

例如:

Domain:
abnormality.id = A-001

MySQL:
abnormalities.id = 25
abnormalities.abnormality_code = A-001

其中:

  • 25 是数据库主键;
  • A-001 是 Domain 业务标识。

225.4 Abnormality异常Domain

第204章已经建立异常模型:

A=(O,Ex,Re,R,S,Co,T)A=(O,E_x,R_e,R,S,Co,T)

其中:

  • OO:Object,发生异常的对象;
  • ExE_x:Execution,相关执行;
  • ReR_e:Expected Result,预期结果;
  • RR:Actual Result,实际结果;
  • SS:State,状态;
  • CoCo:Condition,条件;
  • TT:时间。

为了满足工程持久化需求,可以扩展为:

Ad=(ID,O,Ex,Re,R,S,Co,Type,Severity,Status,Ev,Tc,Tu)A_d= (ID,O,E_x,R_e,R,S,Co,Type,Severity,Status,Ev,T_c,T_u)

其中:

  • ID:异常业务ID;
  • O:对象;
  • E_x:执行;
  • R_e:预期结果;
  • R:实际结果;
  • S:状态;
  • Co:条件;
  • Type:异常类型;
  • Severity:严重程度;
  • Status:异常状态;
  • Ev:证据;
  • T_c:创建时间;
  • T_u:更新时间。

异常状态可以包括:

normal
warning
abnormal
failure
unknown
resolved
closed

需要注意:

Repository 不负责判断:

Re≠RR_e \neq R

是否构成异常。

这个判断属于:

FeedbackEngine
DiagnosisEngine

等计算层。


225.5 异常数据库

建议建立:

CREATE TABLE abnormalities (
    id BIGINT NOT NULL AUTO_INCREMENT,
    abnormality_code VARCHAR(100) NOT NULL,
    object_id BIGINT NULL,
    execution_id VARCHAR(100) NULL,
    expected_result TEXT,
    actual_result TEXT,
    state_data TEXT,
    condition_data TEXT,
    abnormality_type VARCHAR(100) NOT NULL,
    severity INT NULL,
    status VARCHAR(50) NOT NULL,
    evidence TEXT,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY uk_abnormality_code (abnormality_code),
    KEY idx_abnormality_object (object_id),
    KEY idx_abnormality_execution (execution_id),
    KEY idx_abnormality_status (status),
    KEY idx_abnormality_type (abnormality_type)
);

映射:

Domain字段 Persistence字段
id abnormality_code
object_id object_id
execution_id execution_id
expected_result expected_result
actual_result actual_result
state state_data
condition condition_data
type abnormality_type
severity severity
status status
evidence evidence
created_at created_at
updated_at updated_at

225.6 Diagnosis诊断Domain

Diagnosis 的作用不是再次描述异常,而是建立异常与原因之间的结构关系。

第204章定义:

D=(P,E,C,R,S)D=(P,E,C,R,S)

其中:

  • PP:Problem;
  • EE:Evidence;
  • CC:Cause;
  • RR:Recommendation;
  • SS:Diagnosis State。

工程模型:

Dd=(ID,A,P,E,C,R,S,V,Tc,Tu)D_d=(ID,A,P,E,C,R,S,V,T_c,T_u)

其中:

  • ID:诊断业务ID;
  • A:关联异常;
  • P:问题;
  • E:证据;
  • C:原因;
  • R:处理建议;
  • S:诊断状态;
  • V:诊断验证信息;
  • T_c:创建时间;
  • T_u:更新时间。

典型状态:

unknown
detected
analyzing
cause_found
confirmed
multiple_candidates
rejected
resolved
unrecoverable

225.7 Diagnosis与Cause的关系

诊断不能简单设计为:

cause = "resource insufficient"

ICAI 中一个诊断可能存在多个原因候选:

D→{C1,C2,…,Cn}D \rightarrow \{C_1,C_2,\ldots,C_n\}

原因可以定义为:

Cc=(Type,O,Ev,Score,S,T)C_c=(Type,O,Ev,Score,S,T)

其中:

  • Type:原因类型;
  • O:相关对象;
  • Ev:证据;
  • Score:原因排序值;
  • S:原因状态;
  • T:时间。

例如:

Diagnosis D-001

Cause C-001
Type = resource
Required = 2
Actual = 1
State = confirmed

因此一个诊断可以拥有:

Cause-001
Cause-002
Cause-003

然后由 DiagnosisEngine 进行原因计算和排序。

Repository 负责保存这些原因。


225.8 Diagnosis数据库

建议:

CREATE TABLE diagnoses (
    id BIGINT NOT NULL AUTO_INCREMENT,
    diagnosis_code VARCHAR(100) NOT NULL,
    abnormality_code VARCHAR(100) NOT NULL,
    problem_data TEXT,
    evidence TEXT,
    cause_data TEXT,
    recommendation_data TEXT,
    state VARCHAR(50) NOT NULL,
    verification_data TEXT,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY uk_diagnosis_code (diagnosis_code),
    KEY idx_diagnosis_abnormality (abnormality_code),
    KEY idx_diagnosis_state (state)
);

原因独立保存:

CREATE TABLE diagnosis_causes (
    id BIGINT NOT NULL AUTO_INCREMENT,
    cause_code VARCHAR(100) NOT NULL,
    diagnosis_code VARCHAR(100) NOT NULL,
    cause_type VARCHAR(100) NOT NULL,
    object_id BIGINT NULL,
    cause_data TEXT,
    evidence TEXT,
    score DECIMAL(12,6) NULL,
    state VARCHAR(50) NOT NULL,
    created_at DATETIME NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY uk_cause_code (cause_code),
    KEY idx_cause_diagnosis (diagnosis_code),
    KEY idx_cause_type (cause_type),
    KEY idx_cause_state (state)
);

这样可以完整保存:

Abnormality→Diagnosis→CauseCandidatesAbnormality \rightarrow Diagnosis \rightarrow CauseCandidates


225.9 Repair修复Domain

第206章定义:

Rp=(D,M,A,R,S)Rp=(D,M,A,R,S)

其中:

  • DD:Diagnosis;
  • MM:Repair Method;
  • AA:Repair Action;
  • RR:Repair Result;
  • SS:Repair State。

工程模型:

Rpd=(ID,D,M,A,R,S,Co,V,Tc,Tu)Rp_d=(ID,D,M,A,R,S,Co,V,T_c,T_u)

其中:

  • ID:修复业务ID;
  • D:诊断ID;
  • M:修复方法;
  • A:修复动作;
  • R:修复结果;
  • S:修复状态;
  • Co:修复条件;
  • V:验证信息;
  • T_c:创建时间;
  • T_u:更新时间。

修复状态:

candidate
pending
approved
running
completed
failed
partially_recovered
verified
rejected
cancelled

225.10 Repair执行条件

Repair 不能因为存在异常就直接执行。

正确条件:

RepairExecutable=Av∧Dv∧Cv∧Ov∧Cav∧Sv∧RuvRepairExecutable = A_v \land D_v \land C_v \land O_v \land Ca_v \land S_v \land Ru_v

其中:

  • AvA_v:异常有效;
  • DvD_v:诊断有效;
  • CvC_v:原因可修复;
  • OvO_v:对象有效;
  • CavCa_v:修复能力可用;
  • SvS_v:当前状态允许修复;
  • RuvRu_v:规则允许修复。

这些属于 Engine 的计算结果。

Repository 不重新计算。


225.11 Repair数据库

建议:

CREATE TABLE repairs (
    id BIGINT NOT NULL AUTO_INCREMENT,
    repair_code VARCHAR(100) NOT NULL,
    diagnosis_code VARCHAR(100) NOT NULL,
    repair_type VARCHAR(100) NOT NULL,
    condition_data TEXT,
    method_data TEXT,
    action_data TEXT,
    result_data TEXT,
    state VARCHAR(50) NOT NULL,
    verification_data TEXT,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY uk_repair_code (repair_code),
    KEY idx_repair_diagnosis (diagnosis_code),
    KEY idx_repair_type (repair_type),
    KEY idx_repair_state (state)
);

对应:

Domain Database
id repair_code
diagnosis_id diagnosis_code
type repair_type
condition condition_data
method method_data
action action_data
result result_data
state state
verification verification_data
created_at created_at
updated_at updated_at

225.12 Verification验证Domain

验证不是修复状态的一个简单字符串,而是独立的认知事实。

可以定义:

V=(Re,R,Sb,Sa,Co,Ev,T)V=(R_e,R,S_b,S_a,Co,Ev,T)

其中:

  • ReR_e:Expected Result;
  • RR:Actual Result;
  • SbS_b:Before State;
  • SaS_a:After State;
  • CoCo:Verification Condition;
  • EvEv:Evidence;
  • TT:Verification Time。

因此:

Verified=ActualResult+State+Condition+EvidenceVerified = ActualResult + State + Condition + Evidence

验证结果可以包括:

pending
passed
failed
partial
unknown
expired
invalid

225.13 Verification数据库

建议:

CREATE TABLE repair_verifications (
    id BIGINT NOT NULL AUTO_INCREMENT,
    verification_code VARCHAR(100) NOT NULL,
    repair_code VARCHAR(100) NOT NULL,
    object_id BIGINT NULL,
    expected_result TEXT,
    actual_result TEXT,
    state_before VARCHAR(50) NULL,
    state_after VARCHAR(50) NULL,
    condition_data TEXT,
    evidence TEXT,
    status VARCHAR(50) NOT NULL,
    verified_at DATETIME NULL,
    created_at DATETIME NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY uk_verification_code (verification_code),
    KEY idx_verification_repair (repair_code),
    KEY idx_verification_object (object_id),
    KEY idx_verification_status (status)
);

形成:

Repair R-001
      ↓
Verification V-001
      ↓
passed / failed / partial

如果验证失败:

Repair R-001
      ↓
Verification V-001
      ↓
failed
      ↓
DiagnosisEngine
      ↓
Diagnosis D-002
      ↓
Repair R-002

而不是直接把旧记录改成成功。


225.14 修复执行与验证必须分离

必须保持:

RepairExecuted≠RepairEffectiveRepairExecuted \neq RepairEffective

同时:

RepairEffective≠RepairVerifiedRepairEffective \neq RepairVerified

例如:

Repair R-001
state = completed

只能说明修复过程完成。

如果:

Verification V-001
status = failed

则:

RepairExecuted = true
RepairVerified = false

这对于 ICAI 非常重要。

否则系统会出现:

只要执行了修复,就认为问题已经解决。

这是错误的认知逻辑。


225.15 DiagnosisRepairHistory

异常处理必须保存历史。

完整过程可能是:

A-001
 ↓
D-001
 ↓
R-001
 ↓
V-001 Failed
 ↓
D-002
 ↓
R-002
 ↓
V-002 Passed

因此建议建立:

CREATE TABLE diagnosis_repair_history (
    id BIGINT NOT NULL AUTO_INCREMENT,
    history_code VARCHAR(100) NOT NULL,
    abnormality_code VARCHAR(100) NULL,
    diagnosis_code VARCHAR(100) NULL,
    repair_code VARCHAR(100) NULL,
    verification_code VARCHAR(100) NULL,
    event_type VARCHAR(100) NOT NULL,
    state_before VARCHAR(50) NULL,
    state_after VARCHAR(50) NULL,
    event_data TEXT,
    evidence TEXT,
    created_at DATETIME NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY uk_history_code (history_code),
    KEY idx_history_abnormality (abnormality_code),
    KEY idx_history_diagnosis (diagnosis_code),
    KEY idx_history_repair (repair_code),
    KEY idx_history_verification (verification_code),
    KEY idx_history_event (event_type)
);

历史事件可以包括:

abnormality_created
diagnosis_created
cause_identified
cause_confirmed
repair_created
repair_started
repair_completed
repair_failed
verification_started
verification_passed
verification_failed
state_recovered

225.16 Repository接口

PHP 5.6/7兼容的接口:

interface DiagnosisRepairRepositoryInterface
{
    public function findAbnormalityById($id);
    public function findAbnormalitiesByObjectId($objectId);
    public function findAbnormalitiesByExecutionId($executionId);
    public function findAbnormalitiesByStatus($status);
    public function saveAbnormality($abnormality);
    public function updateAbnormality($abnormality);

    public function findDiagnosisById($id);
    public function findDiagnosesByAbnormalityId($abnormalityId);
    public function findDiagnosesByState($state);
    public function saveDiagnosis($diagnosis);
    public function updateDiagnosis($diagnosis);

    public function findDiagnosisCauses($diagnosisId);
    public function saveDiagnosisCause($cause);

    public function findRepairById($id);
    public function findRepairsByDiagnosisId($diagnosisId);
    public function findRepairsByState($state);
    public function saveRepair($repair);
    public function updateRepair($repair);

    public function findVerificationById($id);
    public function findVerificationsByRepairId($repairId);
    public function findVerificationsByStatus($status);
    public function saveVerification($verification);

    public function saveHistory($history);
    public function findHistoryByAbnormalityId($abnormalityId);
    public function findHistoryByDiagnosisId($diagnosisId);
    public function findHistoryByRepairId($repairId);
}

225.17 Repository查询

异常:

findAbnormalityById()
findAbnormalitiesByObjectId()
findAbnormalitiesByExecutionId()
findAbnormalitiesByStatus()

诊断:

findDiagnosisById()
findDiagnosesByAbnormalityId()
findDiagnosesByState()

修复:

findRepairById()
findRepairsByDiagnosisId()
findRepairsByState()

验证:

findVerificationById()
findVerificationsByRepairId()
findVerificationsByStatus()

历史:

findHistoryByAbnormalityId()
findHistoryByDiagnosisId()
findHistoryByRepairId()

但:

Query≠CalculationQuery \neq Calculation

例如:

findRepairsByState("failed")

只能获得失败修复记录。

不能由 Repository 自己决定:

下一步应该采用什么修复方法?

这个问题属于:

RepairEngine
DecisionEngine

225.18 Repository与DiagnosisEngine

正确关系:

Execution
   ↓
Result
   ↓
Feedback
   ↓
Abnormality
   ↓
DiagnosisEngine
   ↓
Diagnosis
   ↓
Mapper
   ↓
DiagnosisRepairRepository
   ↓
MySQL

DiagnosisEngine负责:

异常分析
原因分析
原因排序
诊断计算

Repository负责:

保存
读取
查询
更新
历史

所以:

DiagnosisEngine≠DiagnosisRepairRepositoryDiagnosisEngine \neq DiagnosisRepairRepository


225.19 Repository与RepairEngine

正确结构:

Diagnosis
   ↓
RepairEngine
   ↓
Repair Candidates
   ↓
DecisionEngine
   ↓
Selected Repair
   ↓
ActionEngine
   ↓
ExecutionEngine
   ↓
Actual Result
   ↓
Verification
   ↓
DiagnosisRepairRepository

Repository 不负责选择:

retry
resource_replacement
state_recovery
method_change
action_replacement
environment_recovery

Repository只负责保存已经形成的结构。


225.20 Repository与VerificationEngine

验证计算流程:

Repair
   ↓
Action
   ↓
Execution
   ↓
Actual Result
   ↓
Feedback
   ↓
VerificationEngine
   ↓
Verification Result
   ↓
Repository

VerificationEngine计算:

V=f(Re,R,Sb,Sa,Co,Ev)V=f(R_e,R,S_b,S_a,Co,Ev)

Repository保存:

VdV_d

二者职责不能混合。


225.21 Mapper结构

DiagnosisRepairRepository至少应该配置:

AbnormalityMapper
DiagnosisMapper
DiagnosisCauseMapper
RepairMapper
VerificationMapper
HistoryMapper

统一形成:

Domain
   ↓
Mapper
   ↓
Persistence

例如:

class RepairMapper
{
    public function toPersistence($repair)
    {
        return array(
            'repair_code' => $repair['id'],
            'diagnosis_code' => $repair['diagnosis_id'],
            'repair_type' => $repair['type'],
            'condition_data' => json_encode($repair['condition']),
            'method_data' => json_encode($repair['method']),
            'action_data' => json_encode($repair['action']),
            'result_data' => json_encode($repair['result']),
            'state' => $repair['state'],
            'verification_data' => json_encode($repair['verification']),
            'created_at' => $repair['created_at'],
            'updated_at' => $repair['updated_at']
        );
    }

    public function toDomain($row)
    {
        return array(
            'id' => $row['repair_code'],
            'diagnosis_id' => $row['diagnosis_code'],
            'type' => $row['repair_type'],
            'condition' => $this->decode($row['condition_data']),
            'method' => $this->decode($row['method_data']),
            'action' => $this->decode($row['action_data']),
            'result' => $this->decode($row['result_data']),
            'state' => $row['state'],
            'verification' => $this->decode($row['verification_data']),
            'created_at' => $row['created_at'],
            'updated_at' => $row['updated_at']
        );
    }

    private function decode($value)
    {
        if ($value === null || $value === '') {
            return array();
        }

        $data = json_decode($value, true);

        return is_array($data) ? $data : array();
    }
}

Mapper不负责:

诊断
风险计算
原因分析
修复选择
验证判断
学习

225.22 保存流程

异常保存:

Abnormality→Validate→Map→Persist→ReadBack→VerifyAbnormality \rightarrow Validate \rightarrow Map \rightarrow Persist \rightarrow ReadBack \rightarrow Verify

诊断保存:

Diagnosis→Validate→Map→Persist→CausePersistence→VerifyDiagnosis \rightarrow Validate \rightarrow Map \rightarrow Persist \rightarrow CausePersistence \rightarrow Verify

修复保存:

Repair→Validate→Map→Persist→VerifyRepair \rightarrow Validate \rightarrow Map \rightarrow Persist \rightarrow Verify

验证保存:

Verification→Validate→Map→Persist→VerifyVerification \rightarrow Validate \rightarrow Map \rightarrow Persist \rightarrow Verify


225.23 更新原则

Repository支持更新,但更新不能破坏历史。

例如:

Dt+ΔD→Dt+1D_t+\Delta D\rightarrow D_{t+1}

可以更新:

diagnosis.state
diagnosis.recommendation
diagnosis.verification

但原始诊断历史应该保留。

修复:

Rt+ΔR→Rt+1R_t+\Delta R\rightarrow R_{t+1}

同样不能通过更新覆盖掉:

repair_failed

这一历史事实。

因此:

CurrentState≠HistoryCurrentState \neq History


225.24 删除原则

异常、诊断、修复、验证都可能成为未来学习数据。

因此通常不建议直接物理删除。

更适合:

Active
 ↓
Resolved
 ↓
Closed
 ↓
Archived

尤其:

Diagnosis History
Repair History
Verification History

应该长期保存。

因为这些历史可以进入:

MemoryEngine
ExperienceEngine
RiskEngine
LearningEngine

225.25 Repository与Memory、Experience、Learning

DiagnosisRepairRepository保存的是:

异常事实
诊断事实
修复事实
验证事实
处理历史

后续可以形成:

History
   ↓
MemoryEngine
   ↓
Memory
   ↓
ExperienceEngine
   ↓
Experience
   ↓
LearningEngine
   ↓
Learning Data
   ↓
UpdateEngine

因此:

DiagnosisRepairRepository→History→Memory→Experience→LearningDiagnosisRepairRepository \rightarrow History \rightarrow Memory \rightarrow Experience \rightarrow Learning

但是 Repository 本身不执行学习。

所以:

Repository≠LearningEngineRepository \neq LearningEngine


225.26 完整异常处理数据链

最终形成:

Execution
    ↓
Result
    ↓
Feedback
    ↓
Abnormality
    ↓
Diagnosis
    ↓
Cause
    ↓
Repair Candidate
    ↓
Decision
    ↓
Repair
    ↓
Action
    ↓
Execution
    ↓
Result
    ↓
Feedback
    ↓
Verification
    ↓
History

Repository负责在关键节点保存:

Abnormality
Diagnosis
Cause
Repair
Verification
History

形成完整数据链:

A→D→C→R→V→HA\rightarrow D\rightarrow C\rightarrow R\rightarrow V\rightarrow H


225.27 完整工程架构

整个工程可以表示为:

Controller
    ↓
DiagnosisRepairService
    ↓
DiagnosisEngine
RepairEngine
VerificationEngine
    ↓
Domain Object
    ↓
Mapper
    ↓
DiagnosisRepairRepository
    ↓
PDO
    ↓
MySQL

各层职责:

职责
Controller 请求入口
Service 流程编排
DiagnosisEngine 异常与原因计算
RepairEngine 修复条件与修复计算
DecisionEngine 多修复方案选择
ActionEngine 动作计算
ExecutionEngine 实际执行
VerificationEngine 验证计算
Domain 表达领域结构
Mapper Domain与Persistence转换
Repository 保存、查询、更新、历史
MySQL 持久化数据

因此:

Service≠EngineService \neq Engine Engine≠DomainEngine \neq Domain Domain≠MapperDomain \neq Mapper Mapper≠RepositoryMapper \neq Repository Repository≠MySQLRepository \neq MySQL


225.28 一个完整工程案例

假设:

Object-001

执行:

Execution-001

预期:

success

实际:

failed

首先形成:

Abnormality A-001

然后:

DiagnosisEngine
      ↓
Diagnosis D-001
      ↓
Cause C-001
Type = resource
Required = 2
Actual = 1

之后:

RepairEngine
      ↓
Repair R-001
Type = resource_replacement

实际执行:

Execution-002

结果:

success

验证:

Verification V-001
status = passed

Repository最终保存:

A-001
 ↓
D-001
 ↓
C-001
 ↓
R-001
 ↓
V-001

同时:

diagnosis_repair_history

保存完整处理过程。

这意味着系统以后不仅知道:

问题已经解决

还知道:

问题是什么
为什么发生
采取了什么修复
修复是否执行
最终结果是什么
验证是否通过

225.29 异常处理失败后的再次诊断

如果:

V-001 = failed

不能直接修改成:

V-001 = passed

而应该形成新的处理链:

A-001
 ↓
D-001
 ↓
R-001
 ↓
V-001 Failed
 ↓
D-002
 ↓
R-002
 ↓
V-002 Passed

因此历史可以表达:

A-001
 ├── D-001
 │    └── R-001
 │          └── V-001 Failed
 │
 └── D-002
      └── R-002
            └── V-002 Passed

这使 ICAI 能够保存真实的处理过程,而不是只保留最后一个状态。


225.30 本章核心公式

异常:

A=(O,Ex,Re,R,S,Co,T)A=(O,E_x,R_e,R,S,Co,T)

诊断:

D=(P,E,C,R,S)D=(P,E,C,R,S)

修复:

Rp=(D,M,A,R,S)Rp=(D,M,A,R,S)

验证:

V=(Re,R,Sb,Sa,Co,Ev,T)V=(R_e,R,S_b,S_a,Co,Ev,T)

完整处理:

A→D→Rp→VA\rightarrow D\rightarrow Rp\rightarrow V

完整持久化:

Domain→Mapper→Repository→MySQLDomain \rightarrow Mapper \rightarrow Repository \rightarrow MySQL

完整读取:

MySQL→Repository→Mapper→DomainMySQL \rightarrow Repository \rightarrow Mapper \rightarrow Domain


225.31 本章核心原则

第一:

Abnormality≠DiagnosisAbnormality \neq Diagnosis

异常描述实际偏离,诊断分析原因。

第二:

Diagnosis≠RepairDiagnosis \neq Repair

诊断结果不等于修复已经执行。

第三:

RepairExecuted≠RepairVerifiedRepairExecuted \neq RepairVerified

执行完成不等于修复成功。

第四:

Verification≠CurrentStateVerification \neq CurrentState

验证是独立的结果和证据记录。

第五:

DomainObject≠DatabaseRowDomainObject \neq DatabaseRow

Domain必须通过Mapper映射到数据库。

第六:

Query≠CalculationQuery \neq Calculation

Repository负责查询,不负责认知计算。

第七:

Repository≠EngineRepository \neq Engine

Engine负责计算,Repository负责持久化。

第八:

History≠CurrentStateHistory \neq CurrentState

历史记录不能被当前状态覆盖。

第九:

Failure≠CapabilityInvalidFailure \neq CapabilityInvalid

一次异常不能直接证明能力失效,必须经过诊断、验证和后续学习过程。

第十:

VerificationPassedVerificationPassed

只能在真实结果、状态、条件和证据满足要求后成立。


225.32 本章总结

DiagnosisRepairRepository 建立的是 ICAI 异常处理体系的持久化基础。

其核心结构:

DiagnosisRepairRepository=Abnormality+Diagnosis+Repair+Verification+History+Query+Persistence\boxed{ DiagnosisRepairRepository = Abnormality + Diagnosis + Repair + Verification + History + Query + Persistence }

完整链路:

Execution
    ↓
Result
    ↓
Feedback
    ↓
Abnormality
    ↓
Diagnosis
    ↓
Repair
    ↓
Execution
    ↓
Verification
    ↓
History
    ↓
Memory
    ↓
Experience
    ↓
Learning
    ↓
Update

Repository 位于:

Domain
   ↓
Mapper
   ↓
Repository
   ↓
MySQL

这一数据边界之中。

最终形成:

异常可记录→诊断可追踪→修复可保存→验证可证明→历史可复查\boxed{ 异常可记录 \rightarrow 诊断可追踪 \rightarrow 修复可保存 \rightarrow 验证可证明 \rightarrow 历史可复查 }

由此,第225章完成了 ICAI 从 DiagnosisEngine、RepairEngine、VerificationEngineDomain、Mapper、Repository、MySQL 的持久化衔接,使异常处理不再只是一次性的运行过程,而成为可以读取、验证、追踪并供后续 Memory、Experience、Learning 和 Update 使用的结构化认知数据。

Leave a Reply

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