ComposeView 的上下游继承关系及相关类/接口分析

ComposeView 的上下游继承关系及相关类/接口分析

一、ComposeView 的完整继承层次结构

1. 上游继承链(从基类到ComposeView)

less 复制代码
BaseObject
├── AbstractBaseView (实现 IViewPublicApi, IModuleAccessor, IPagerId 接口)
│   └── DeclarativeBaseView
│       └── ViewContainer<A : ContainerAttr, E : Event>
│           └── ComposeView<A : ComposeAttr, E : ComposeEvent>
├── BaseEvent (实现 IEvent, IPagerId 接口)
│   └── Event
│       └── ComposeEvent
└── Props
    └── Attr (实现 IStyleAttr, ILayoutAttr 接口)
        └── ContainerAttr (实现 IContainerLayoutAttr, IEventCaptureAttr 接口)
            └── ComposeAttr

2. 各层核心功能职责

BaseObject
  • 所有对象的最基础父类,提供属性扩展和响应式监听机制
  • 核心功能:
    • extProps:动态扩展字段存储
    • bindValueChange():绑定表达式变化监听
    • unbindAllValueChange():移除所有绑定监听
AbstractBaseView
  • 继承 BaseObject 并实现以下接口:
    • IViewPublicApi:视图公共API接口
    • IModuleAccessor:模块访问器接口
    • IPagerId:持有pagerId的接口(已被 PagerScope 替代)
  • 核心功能:
    • 视图引用管理
    • Flex节点管理
    • 属性和事件处理
    • 生命周期方法
DeclarativeBaseView
  • 继承 AbstractBaseView
  • 核心功能:
    • 父视图和DOM父视图管理
    • ReactiveObserver集成,响应属性变化
    • 生命周期方法
    • 渲染视图管理和坐标转换
ViewContainer
  • 继承 DeclarativeBaseView,泛型类 ViewContainer<A : ContainerAttr, E : Event>
  • 核心功能:
    • 子视图管理(addChild, removeChild
    • 模板子视图访问(templateChildren
    • DOM操作
    • Flex布局管理
ComposeView
  • 继承 ViewContainer,泛型类 ComposeView<A : ComposeAttr, E : ComposeEvent>
  • 核心功能:
    • 组合组件生命周期管理(created, viewWillLoad, viewDidLoad, viewDidLayout等)
    • body():抽象方法,定义视图内容构建器
    • pagerData:获取页面数据
    • emit():触发事件

二、属性体系继承链

Props
  • 属性基类,提供基本属性管理功能
Attr
  • 继承 Props 并实现以下接口:
    • IStyleAttr:样式属性接口
    • ILayoutAttr:布局属性接口
  • 核心功能:
    • Flex节点管理
    • 动画管理
    • 属性任务管理
ContainerAttr
  • 继承 Attr 并实现以下接口:
    • IContainerLayoutAttr:容器布局属性接口
    • IEventCaptureAttr:事件捕获属性接口
  • 核心功能:
    • Flex布局方向设置
    • 对齐方式设置
    • 玻璃效果设置(iOS)
ComposeAttr
  • 继承 ContainerAttr
  • 为组合组件提供基础属性支持

三、事件体系继承链

BaseEvent
  • 继承 BaseObject 并实现以下接口:
    • IEvent:事件接口
    • IPagerId:持有pagerId的接口
  • 核心功能:
    • 事件注册和取消注册
    • 事件触发
Event
  • 继承 BaseEvent
  • 核心功能:
    • 插件事件管理
    • 同步事件支持
    • 扩展事件中心
ComposeEvent
  • 继承 Event
  • 核心功能:
    • 组合事件映射管理
    • 事件注册和触发

四、ComposeView 的下游子类

1. Pager

  • 继承 ComposeView<ComposeAttr, ComposeEvent> 并实现 IPager 接口
  • 页面容器类,管理整个页面的生命周期和状态

2. SliderPageView

  • 继承 ComposeView<SliderPageAttr, SliderPageEvent>
  • 滑块页面视图组件

3. CheckBoxView

  • 继承 ComposeView<CheckBoxAttr, CheckBoxEvent>
  • 复选框组件

4. ButtonView

  • 继承 ComposeView<ButtonAttr, ButtonEvent>
  • 按钮组件

5. SwitchView

  • 继承 ComposeView<SwitchAttr, SwitchEvent>
  • 开关组件

6. SliderView

  • 继承 ComposeView<SliderAttr, SliderEvent>
  • 滑块组件

五、相关接口详解

1. IViewPublicApi

  • 视图公共API接口,定义视图引用、属性/事件设置、坐标转换、动画等方法

2. IModuleAccessor

  • 模块访问器接口
  • 提供方法:
    • getModule(name: String): T?:获取模块,不存在返回null
    • acquireModule(name: String): T:获取或创建模块

3. IPagerId / PagerScope

  • IPagerId:已被废弃,由 PagerScope 替代
  • PagerScope:持有pagerId的接口
    • 属性:pagerId: String
    • 方法:getPager(): IPager

4. ILayoutAttr

  • 布局属性接口,用于设置视图的布局属性
  • 提供方法:width(), height()

5. IContainerLayoutAttr

  • 容器布局属性接口,扩展自 ILayoutAttr
  • 提供方法:flexDirection(), justifyContent(), alignItems(), flexWrap(), padding()

6. IEventCaptureAttr

  • 事件捕获属性接口
  • 提供方法:capture(),支持设置点击、双击、长按、拖拽等捕获规则

7. IEvent

  • 事件接口,定义事件的基本操作

8. IPager

  • 页面接口,定义页面的生命周期和操作方法
  • 提供方法:onCreatePager(), onDestroyPager(), pageDidAppear(), pageDidDisappear()

六、ComposeView 的设计特点

  1. 组合式API设计 :通过 body() 函数构建视图,支持声明式UI
  2. 完整生命周期:提供从创建到销毁的完整生命周期钩子
  3. 泛型支持:通过泛型参数支持不同类型的属性和事件
  4. 组件化架构:作为UI组件的基类,方便组件的组合和复用
  5. 响应式集成:继承自响应式系统,支持数据流驱动UI更新
  6. 事件系统:完善的事件注册、分发和处理机制
  7. 布局系统:基于Flexbox的灵活布局能力

七、总结

ComposeView 是 KuiklyUI 框架中组合式UI的核心基类,通过多层继承体系实现了从基础对象到复杂UI组件的功能扩展。它不仅继承了视图容器的全部能力,还提供了组合式API和完整的生命周期管理,为框架中的各种UI组件(如按钮、开关、滑块等)提供了统一的基础架构。

整个继承体系设计合理,职责分明,通过泛型、接口和抽象类的组合使用,实现了高内聚、低耦合的架构设计,充分体现了面向对象编程的封装、继承和多态特性。

相关推荐
Crystal3289 分钟前
Git 基础:生成版本、撤消操作、版本重置、忽略文件
前端·git·github
Elastic 中国社区官方博客2 小时前
用 Elasticsearch 构建一个 ChatGPT connector 来查询 GitHub issues
大数据·人工智能·elasticsearch·搜索引擎·chatgpt·github·全文检索
用户345848285053 小时前
除了使用dict.fromkeys()和OrderedDict.fromkeys(),还有哪些方法可以实现列表去重?
github
摇滚侠3 小时前
零基础小白自学 Git_Github 教程,git 命令行操作1,笔记18
笔记·git·github
无限进步_4 小时前
C++从入门到类和对象完全指南
开发语言·c++·windows·git·后端·github·visual studio
itwangyang5204 小时前
在 GitHub 上生成和配置个人访问令牌(PAT),并将其用于 R 环境中的凭证管理和包安装。
开发语言·r语言·github
love530love4 小时前
【ComfyUI/SD环境管理指南(二)】:如何避免插件安装导致的环境崩溃与“外科手术式”修复
人工智能·windows·python·stable diffusion·github·aigc·comfyui
Jonathan Star5 小时前
Git 的 pre-commit hook(以及其他钩子脚本)默认不会被 git commit 追踪,也不会被 git push 推送到远程仓库
github
无限进步_6 小时前
C++初始化列表详解:语法、规则与最佳实践
java·开发语言·数据库·c++·git·github·visual studio
无限进步_6 小时前
C++运算符重载完全指南:从基础到实战应用
开发语言·数据库·c++·windows·git·github·visual studio