news 2026/7/7 20:45:17

更新机制概述【技术文章】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
更新机制概述【技术文章】

摘要

本文介绍了特征更新机制的主要概念。

基本概念

规格-结果 模型

在 “Spec-Result” 规格-结果范式(spec是specification 的缩写)中,一个特征完全由其规格定义,并且能够在任何时刻计算其结果。

例如,一个圆可以以圆心和半径值作为其规格,而其结果是其轮廓,如下图所示:


图1 规格/结果

规格也可以称为输入,结果也可以称为输出。
特征的规格可以是:

  • 原始属性(布尔值、整数…)
  • 其他特征
  • 其他特征的属性
  • 其他特征的"结果"

特征的结果是一个宽泛的概念:

  • 对于机械特征,它是其生成的几何数据。
  • 对于知识公式,它是其输出参数。
  • 对于知识规则,它是脚本运行期间执行的操作
  • 对于许多"结构"特征:无结果

由于特征的结果是定义该特征的应用程序的内在概念,它并未被特征建模器形式化或管理。这种分离允许将规格-结果模型视为一个其结果可以异步计算的参数化系统

构建

构建是特征根据其规格计算相应结果的过程。此过程只能由拥有该特征的应用程序实现,并且不能直接调用。更多信息请阅读文章 “构建一个特征”1

特征在其构建过程中使用的规格,也可以是其他特征构建过程计算出的结果。例如,一个圆可以由一个长度和一个点组成,而这个点本身又是一个以坐标作为输入的特征。首先必须构建点,然后才能使用一个有效的点作为输入来更新圆。这种递归性由更新引擎管理。

更新

更新过程的目的是确保在构建过程中使用特征的规格之前,这些规格是有效的。因此更新引擎可以被看作是一个构建调度器,能够以正确的顺序启动特征网络的构建过程。
下图通过一个圆柱体说明了这个顺序。圆柱体(一个特征)由高度(实数值)和一个圆组成。而圆(一个特征)又由半径(实数值)和一个点(一个特征)组成。


图2 构建顺序

当您请求更新圆柱体时,首先更新点,然后更新圆,最后更新圆柱体。
与构建过程相反,更新不能被定制,但可以被应用程序直接调用。

更新状态

一个被更新引擎称为"最新"的特征,其结果是与其规格是匹配的。相反的状态是"过时"。

更新机制

能力与限制

更新引擎构建在特征建模器之上,因此所有特征,即使是那些从头创建的特征,都能受益于此引擎。
更新引擎在所有通过其特征建模器链接连接的特征之间创建了一个依赖关系图。因此依赖关系图的内省是完全集中化、健壮的,并且能够抵抗应用程序软件/模型的修改。
更新过程不是上下文相关的,只要应用程序的构建过程不变,它在命令中或在批处理过程中将以相同的方式工作。

更新算法

更新引擎可以概括为以下一句话:“一个特征是最新的,当且仅当其所有输入都是最新的,并且其构建过程成功”。这引出了以下三种算法:

  • IsUpToDate
  • Update
  • Impact Propagation

IsUpToDate

IsUpToDate 算法用于检索特征的更新状态。

"最新"意味着特征的结果与其规格一致。因此构建一个"最新"的特征是徒劳的,因为其构建过程将产生完全相同的结果。

一个特征处于最新状态,当且仅当:

  • 它的规格是最新的
  • 它已被成功构建
  • 自上次构建以来,其规格未被更改

"最新"状态可以通过以下方法检索:

  • CATFmFeatureFacade::IsUpToDate(框架 FeatureModelerExt)
  • DataCommonProtocolServices::IsUpToDate(框架 DataCommonProtocolUse)

Update

Update 算法用于计算特征的结果。如果特征已经是最新的,则不执行任何操作。它是将特征的更新状态从"过时"更改为"最新"的唯一方法。 Update 算法是:
  • 步骤1:递归更新所有规格
  • 步骤2:调用构建过程
  • 步骤3:将特征状态更改为最新

显然,如果任何一个步骤失败,特征将保持"过时"状态。

Update 可以通过以下方法调用:

  • CATFmFeatureFacade::Update(框架 FeatureModelerExt)
  • DataCommonProtocolServices::Update(框架 DataCommonProtocolUse)

Impact Propagation

当一个特征的规格被修改时,该特征变为过时。

递归地,所有以该第一个特征作为规格的特征也应该变为过时。

影响传播算法是:

  • 步骤1:将特征的更新状态更改为过时
  • 步骤2:递归地将影响链上特征的更新状态更改为过时

这项工作由影响传播机制同步执行,并避免了每次检索更新状态时对图的深度遍历。
在[图.2]的例子中,假设您修改了点的一个坐标。圆立即变为"过时",并且递归地圆柱体也变为"过时"。
请注意,即使规格的修改对特征的结果没有影响,整个影响关系图也将变为过时。例如[图.2],您将点的一个坐标替换为相同的值。但是尽管它们各自的结果仍然有效,圆和圆柱体还是变为"过时"。特征建模器不知道应用程序的语义。

没有办法显式调用影响传播。当修改对更新引擎可见的属性时,它将由特征建模器自动启动。

与其它特征建模器机制的集成

持久性

更新状态是持久化的,这意味着您可以保存过时的数据(并在另一个会话中更新它们)。

撤销/重做

更新是可撤销的。

如果特征结果不由特征建模器属性(这些属性也是可撤销的)持有,则由应用程序负责管理可撤销性。

实例化

创建(实例化)后,特征不是最新的,因为它从未被构建/更新过。

数据交换 (CCP/协作)

原生的特征建模器 CCP/协作实现会创建(如同实例化)过时的特征。

简而言之

本文介绍了特征更新机制的基础知识。

历史记录

版本:1 [2010年6月] 文档创建


  1. 构件示例 ↩︎

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 11:24:34

第三章 数组

3.1 数组的概述 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括 基本数据类型和引用数据类型。  创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是 这块连续空间的首地址。  数组的长度一旦确定&#x…

作者头像 李华
网站建设 2026/7/1 11:24:04

在洗浴中心泡澡时睡着会溺水吗?一场关于安全与放松的闲谈

在忙碌的生活节奏里,洗浴中心成了很多人放松身心的“避风港”。泡在温热的池水中,感受着水流轻柔的包裹,疲惫与压力仿佛都被一点点抽离,不少人会在这种惬意的状态下不知不觉闭上眼睛,甚至进入浅睡眠。然而,…

作者头像 李华
网站建设 2026/7/1 11:24:04

WordPress定制开发自动化测试最佳实践

为什么WordPress定制开发需要自动化测试多年的WordPress定制开发经验中,发现许多项目在上线后出现的问题,往往源于测试不充分。传统的手工测试不仅耗时费力,还容易遗漏关键场景。自动化测试的引入彻底改变了这一局面。通过自动化测试&#xf…

作者头像 李华
网站建设 2026/7/1 11:24:07

这款产品解锁《秘奥:秘宇奥忆》沉浸式星际探秘

当腐朽奢华的太空废土遇上高速流畅的类银河恶魔城玩法,法国独立工作室 Douze Diximes 打造的《秘奥:秘宇奥忆》,将漫画线条、水彩质感与油画诗意熔于一炉,在锈蚀机械与葱郁植被的碰撞中,构筑出孤独又浪漫的星际方舟世界…

作者头像 李华
网站建设 2026/7/1 11:24:23

代码是如何变成可执行文件的?

代码是如何变成可执行文件的?—— 深入理解编译全过程 起因 前几天在公司,我的 mentor 突然问我:“代码在编译过程中,预处理阶段到底在做什么?” 我愣了一下,发现自己对这块知识的理解确实有些模糊。虽然每…

作者头像 李华
网站建设 2026/6/15 20:31:46

字节这款新AI让导演都慌了!Seedance2.0凭什么能自动剪大片?

📌 目录🎬 字节杀疯了!Seedance2.0自动剪大片,导演都慌了:这是要抢饭碗?一、核心黑科技:双分支大脑,终结AI音画错位的噩梦二、实测封神:多模态神操作,细节碾压…

作者头像 李华