news 2026/4/24 12:56:44

单向数据流 (UDF)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
单向数据流 (UDF)

单向数据流原则 (Unidirectional Data Flow)
在 Android 开发中,单向数据流是构建可预测、可维护 UI 的核心原则。

在 Jetpack Compose 中的实现

// ✅ 正确:单向数据流dataclassPlaylistUiState(valplaylists:List<Playlist>=emptyList(),valisLoading:Boolean=false,valerror:String?=null)classPlaylistViewModel:ViewModel(){privateval_uiState=MutableStateFlow(PlaylistUiState())valuiState:StateFlow<PlaylistUiState>=_uiState.asStateFlow()// 唯一的状态变更入口funonEvent(event:PlaylistEvent){when(event){isPlaylistEvent.LoadPlaylists->loadPlaylists()isPlaylistEvent.DeletePlaylist->deletePlaylist(event.id)isPlaylistEvent.SelectPlaylist->selectPlaylist(event.id)}}privatefunloadPlaylists(){viewModelScope.launch{_uiState.update{it.copy(isLoading=true)}try{valplaylists=playlistRepository.getAll()_uiState.update{it.copy(isLoading=false,playlists=playlists)}}catch(e:Exception){_uiState.update{it.copy(isLoading=false,error=e.message)}}}}}// UI 层:纯渲染,不含业务逻辑@ComposablefunPlaylistScreen(viewModel:PlaylistViewModel=viewModel()){valuiStatebyviewModel.uiState.collectAsState()PlaylistContent(state=uiState,onLoadClick={viewModel.onEvent(PlaylistEvent.LoadPlaylists)},onDeleteClick={id->viewModel.onEvent(PlaylistEvent.DeletePlaylist(id))})}

❌ 常见的反模式

// ❌ 错误:直接在 UI 层修改状态@ComposablefunBadExample(){varcountbyremember{mutableIntStateOf(0)}Button(onClick={count++}){// 直接修改状态Text("点击:$count")}}// ❌ 错误:ViewModel 直接操作 UIclassBadViewModel:ViewModel(){funupdateUI(){// ❌ 绝对不要持有 Compose 的引用// activity?.runOnUiThread { ... }}}

与双向绑定的对比

特性双向绑定 (传统)单向数据流 (Compose)
数据来源View 和 ViewModel 都可以修改只有 ViewModel
调试难度难(状态可能在多处被修改)易(变更追踪唯一)
测试性需要 mock UI 组件可独立测试 ViewModel
复杂度简单场景简单需要定义 Action/State

简单来说:UI 只负责"展示",不负责"判断"和"修改"。所有决策逻辑都集中在 ViewModel 层。

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

【仅限头部金融科技团队内部流传】C++ MCP网关超低延迟调优清单(含CPU频率锁定、irqbalance屏蔽、RCU替代锁、以及禁用所有kernel softirq的实操禁忌)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C 编写高吞吐量 MCP 网关 性能调优指南 MCP&#xff08;Model Control Protocol&#xff09;网关作为 AI 模型服务的统一接入层&#xff0c;其吞吐能力直接决定多模型协同调度的实时性与稳定性。在 C 实…

作者头像 李华