106 lines
6.2 KiB
Markdown
106 lines
6.2 KiB
Markdown
# 11. 资源访问与呈现
|
||
|
||
客户端是 Endorphin 资源的查看与运行环境。它可以访问获准查看的 namespace、函数、类和结果值,并根据当前资源的类型及访问状态选择呈现方式。
|
||
|
||
界面由普通函数返回的可渲染值表达,不使用独立的 scene 声明或 render 块。本章定义资源定位、函数查看、调用与结果呈现之间的关系;顶级类型及其契约仍待定义,见[规范状态](../appendices/specification-status.md#资源访问与呈现)。
|
||
|
||
## 11.1 资源定位与访问
|
||
|
||
namespace key 定位代码归属及检索范围,函数名或类名选择其中的声明。定位声明、查看定义与发起调用是不同的访问行为。
|
||
|
||
```text
|
||
namespace:alice:shop.pricing
|
||
声明:discountedPrice
|
||
|
||
namespace:alice:shop.data
|
||
声明:Product
|
||
```
|
||
|
||
该示意没有定义 URL、请求协议或新的源码限定名语法。具体名称查找遵守[程序结构与导入](04-program-structure.md)的可见性规则。
|
||
|
||
| 访问对象 | 当前资源的含义 | 呈现或使用方式 |
|
||
| --- | --- | --- |
|
||
| namespace | 获准访问的逻辑代码集合 | 查看代码视图及其成员 |
|
||
| 函数定义 | 参数、返回类型与函数体 | 查看定义,或准备相应调用 |
|
||
| 类定义 | 类型及其结构 | 查看类型定义,不自动取得业务对象 |
|
||
| 函数调用结果 | 本次执行产生的值 | 按结果类型呈现,或供后续程序使用 |
|
||
|
||
查看 namespace 不表示执行其中全部函数,也不保证包含全部下级 namespace。查看定义的权限与调用权限分别适用;代码定位本身不授予权限。
|
||
|
||
## 11.2 函数本身与返回值
|
||
|
||
函数本身具有可调用的类型,调用完成后取得的值具有结果类型。二者不能混同;尚未调用时,返回类型描述结果约束,不表示结果已经存在。
|
||
|
||
以下示例使用[函数与调用](09-functions-and-calls.md)中的声明,假定 discountedPrice 可查看且可调用:
|
||
|
||
```text
|
||
查看 alice:shop.pricing 中的 discountedPrice
|
||
→ 取得函数定义
|
||
|
||
提供 price = 100、discount = 10 并调用
|
||
→ 取得结果 90
|
||
```
|
||
|
||
前一种访问查看函数本身,后一种访问处理整数结果。函数没有因为参数未填写而改变类型。
|
||
|
||
## 11.3 参数就绪与调用状态
|
||
|
||
客户端访问函数时,如果必要输入尚未提供,应保留对函数本身的查看,可以展示函数签名及获准查看的源码。输入满足调用要求后,可以发起调用,并根据实际返回值选择呈现方式。
|
||
|
||
此处未填写的输入指调用前尚未绑定的必填参数,不指函数体中的局部变量。默认参数、可省略参数和平台提供参数的具体规则尚未定义。
|
||
|
||
这一访问行为不改变普通调用表达式的参数检查:业务源码中缺少必填参数的调用仍应得到诊断,不能静默转换成源码查看。
|
||
|
||
| 状态 | 客户端当前处理的内容 |
|
||
| --- | --- |
|
||
| 必填参数尚未就绪 | 函数本身,不执行尚不满足输入要求的调用 |
|
||
| 调用已开始,结果未就绪 | 本次调用的等待状态,或已经可用的部分界面 |
|
||
| 调用成功 | 符合声明的结果值,按其类型处理 |
|
||
| 调用失败 | 本次执行失败,不伪造成功结果 |
|
||
|
||
等待后端结果不等于缺少调用参数,不能因此退回为函数源码展示。具体参数填写界面和状态呈现形式仍待定义。
|
||
|
||
## 11.4 普通函数与界面结果
|
||
|
||
函数使用普通参数、表达式、调用与 return 表达界面逻辑。客户端取得可渲染类型的结果后渲染界面;其他结果依据相应类型的呈现约定处理。界面构造表达式与可渲染类型的正式名称尚未定义,本章不引入占位类型或专用 UI 文法。
|
||
|
||
下面是访问行为示意,不是源码。假定 `bob:shop.ui` 中存在可访问的 productPage,接收一个商品编号,并返回可渲染值:
|
||
|
||
```text
|
||
打开 productPage,尚未提供商品编号
|
||
→ 查看函数定义
|
||
|
||
提供商品编号 p1001 并调用 productPage
|
||
→ 取得该商品的界面值
|
||
→ 客户端渲染界面
|
||
```
|
||
|
||
函数内部产生的界面值也可以交给其他函数组合或使用。这里的自动呈现针对客户端当前打开的资源或调用结果,不要求每个中间结果都显示到屏幕上。
|
||
|
||
返回类型约束结果的用途,不单独决定函数的执行位置。普通业务函数、界面函数和类型声明共用 namespace 的组织方式。
|
||
|
||
## 11.5 跨端调用与持续更新
|
||
|
||
前端通过函数调用请求结果,通过 hook 关联持续更新。hook 表示触发或订阅关系,可用于界面、后端逻辑及其他数据同步用途;其源码形式与生命周期边界尚未定义。
|
||
|
||
系统依据调用依赖与 hook 关系组织相关执行,包括需要在后端解释执行的逻辑,并将结果交给前端使用。前后端的通信由平台承担;应用代码直接使用符合声明类型的值,不要求自行解析传输响应或恢复业务对象类型。
|
||
|
||
```text
|
||
客户端执行界面逻辑
|
||
→ 调用数据函数或建立 hook 关联
|
||
→ 系统组织后端执行并交付结果
|
||
→ 客户端使用结果或后续更新,调整界面
|
||
```
|
||
|
||
一次调用与持续结果的区别见[数据读取](10-data-access.md#105-一次读取与持续结果)。自动更新的范围、业务修改的重复执行规则及取消行为仍待定义;依赖关系不自动授权系统重复执行所有相关函数。
|
||
|
||
## 11.6 按类型呈现的边界
|
||
|
||
按资源类型选择处理方式是客户端的呈现方向。顶级类型的名称、集合、继承或协议关系,以及不同类型对应的展示契约,统一保留在[规范状态](../appendices/specification-status.md#资源访问与呈现)中。
|
||
|
||
平台不能仅凭对象字段或方法的结构认定其属于可渲染类型或实现了展示能力。类型身份与兼容规则见[类型与类](07-types-and-classes.md#76-类型身份与兼容);具体展示能力关系仍待定义。
|
||
|
||
本章不规定普通对象必须继承界面类型,也不指定数据查看器、媒体播放器或代码查看器的实现。官方 UI 组件的现有效果提案见[UI 组件](12-ui-components.md)。
|
||
|
||
[上一章:数据读取](10-data-access.md) · [下一章:UI 组件](12-ui-components.md) · [目录](../README.md)
|