Skip to main content

官方扩展库的语义

· 6 min read

扩展库包含的概念

一套完整全栈的扩展库(由 GPL 实现)包含以下概念:

  • 数据结构
  • 枚举
  • 全局逻辑
  • 前端逻辑
  • 前端全局变量
  • 前端组件

框架领域和扩展库的关系

框架的某个领域,在 NASL 层以官方扩展库的形式暴露给开发者使用。

空模板 + PC 端组件库 + 用户认证扩展库(nasl.auth)相当于该应用引入了用户认证的能力,IDE 根据这个 enable 用户认证相关设施。 空模板 + PC 端组件库 + 用户认证扩展库(nasl.auth) + 权限扩展库(nasl.permission)相当于该应用引入了权限的能力,IDE 根据这个 enable 权限相关设施。

目前的PC 端模板 = 空模板 + PC 端组件库 + 用户认证扩展库(nasl.auth) + 权限扩展库(nasl.permission) + 用户和权限实体、逻辑等已有代码 只不过我们框架没有把各种扩展库拆开,相当于直接 import * from nasl.official,PC 端模板 = 空模板 + 官方库 + 用户和权限实体、逻辑等已有代码

示例1:用户认证库

用户认证库的定义

使用者代码

示例2:权限库

权限库的定义

使用者代码

结论

会议上半场

  • 通过暴露方法屏蔽领域中实例的生命周期概念以及和语言作用域的交叉问题,也不用暴露 Session 等概念。用户能 get 到就 get,get 不到就表示不在这个生命周期里。
  • 用户认证库暴露getUserInfo()后端逻辑,前端state.userInfo = getUserInfo()涉及到一系列框架实现,也有一定复杂性,推荐以只读前端全局变量的概念暴露给用户直接使用。

会议下半场

  • 杰哥倾向于使用 duck type;
  • 炜昕建议不要引用interface的概念,直接使用 structure typing 检查即可。

具体语义见上面的例子。

关于应用状态的访问与存储

  • 全局变量:不提供全局变量机制,因为在多副本的情况下有副作用。如果有需要,提供 LowLevel 的 Redis API。
  • 前端全局变量:已上线
  • 不同生命周期 Framework:通过暴露 get/set 方法,屏蔽领域中实例的生命周期概念以及和语言作用域的交叉问题,也不用暴露 Session 等概念。
  • 跨页面通信:通过前端全局变量