当前位置: 首页 > news >正文

Compose 三层结构设计规范1(基于Slot API)

Compose 三层结构设计规范(基于Slot API)

结构层:简洁,不包含业务资源和默认值
中间层:尽可能复用参数,写常用到的默认值
调用层:只写差异的数据

一、三层结构角色定位与默认值策略

1. 结构层 (ProfileCardLayout):“纯骨架”

  • 默认值策略:尽量不给业务默认值。
  • 核心职责:仅定义“坑位”位置、层级(Z-axis)堆叠规则、基础物理规则(内边距padding、间距spacing)。
  • 参数处理规则
    • Modifier:默认赋值为Modifier
    • Slot (Composable 类型):默认赋值为null
    • 禁止写死任何R.drawableR.color等业务资源。

2. 中间层/业务层 (UserInfoCard):“配置员”

  • 默认值策略:大胆定义业务默认值。
  • 核心职责:将结构层抽象为具体业务组件,定义卡片默认背景、默认图标等业务级UI规则。
  • 参数处理规则
    • IconResbackgroundImageTextStyle等参数赋予具体业务默认值。
    • 实现调用层在90%场景下仅需传递titledetails等核心数据。

3. 调用层 (Screen/Page):“使用者”

  • 默认值策略:仅传递“差异化”数据。
  • 核心职责:仅关注具体业务数据(如显示“陈奕迅”或“周杰伦”),不处理UI配置细节。
  • 核心优势:代码简洁,业务逻辑清晰,避免被UI配置细节淹没。

二、三层结构参数处理示例对比

维度结构层 (ProfileCardLayout)中间层 (UserInfoCard)调用层 (UserInfoCard)
背景图backgroundImage: @Composable? = nullbg: Int = R.drawable.ic_default(不传,用默认)
图标leftContent: @Composableicon: IconRes = IconRes(R.id.vip)icon = IconRes(R.id.svip)
内边距写死在 Row 上 (Layout 规定)不涉及不涉及

三、三层结构设计的核心优势

  1. 易于维护:UI视觉改版时(如所有卡片内边距从16dp改为20dp),仅需修改结构层一处即可生效。
  2. 视觉统一:业务元素改版时(如VIP图标样式统一更换),仅需修改中间层的默认值。
  3. 开发效率:编写新页面时,仅需传递1-2个差异化参数,即可完成卡片UI渲染。

四、结构层代码示例

@ComposablefunProfileCardLayout(modifier:Modifier=Modifier,backgroundImage:(@Composable()->Unit)?=null,// 若左侧内容是核心,可不设 null,强制传入leftContent:@Composable()->Unit,rightContent:(@Composable()->Unit)?=null,overlayContent:(@Composable()->Unit)?=null){Box(modifier=modifier){// 背景层backgroundImage?.invoke()Row(modifier=Modifier.fillMaxSize().padding(...)// 布局定义的内边距(结构层规定)){// 给左侧 Box 设置 weight,避免右侧内容被挤压Box(modifier=Modifier.weight(1f)){leftContent()}rightContent?.let{Box{it()}}}// ... overlay}}

五、业务层补充说明

UserInfoCard 中间层已包含backgroundImage默认值,符合设计规范。针对details文字过长的处理规则(自动换行/单行显示加省略号),建议在中间层定义为业务规则。

总结

  1. 结构层仅负责布局规则,不包含任何业务默认值和资源;中间层承接业务默认配置,调用层仅传差异化数据。
  2. 三层结构设计可实现单点维护、视觉统一、高效开发的核心目标。
  3. 文字超长显示规则属于业务规则,建议在中间层(UserInfoCard)统一定义。
http://www.jsqmd.com/news/493658/

相关文章:

  • 为什么IP定位总是不准?揭秘IP定位的“精度分层”与选型策略
  • 机械臂构型全解析:从笛卡尔到Delta,哪种最适合你的项目?
  • 低空+公安警务:空天地一体化构建智慧安防新范式,SaaS应用重磅开放
  • 深入人工智能核心:MiniCPM-V-2_6模型架构与训练技术解析
  • OFA模型STM32项目展示:边缘设备图像描述的概念验证
  • ViT: 用transformer架构解决视觉问题
  • Phi-3 Forest Laboratory 开发环境搭建:Ubuntu系统保姆级部署教程
  • 卷积怎么实现?手写 CNN 才让我真正搞懂 im2col
  • 英伟达 NIM API 配置 Claude Code 完整教程(使用 CCR UI)
  • 暗黑破坏神2存档编辑器终极指南:免费开源工具让你的游戏体验更完美
  • 向量数据库存储与检索
  • 01-N8N进阶指南-利用Docker容器化部署与云服务集成实战
  • 微信小程序文件索引化管理与高效检索实践
  • Z-Image-GGUF助力CAD设计:自动生成产品概念草图与渲染图
  • SpringBoot项目在IDEA中无法启动?手把手教你修复启动类识别与依赖问题
  • 揭秘lora-scripts:如何用低资源快速微调,打造你的专属AI助手
  • 语音剪辑神器:Qwen3-ForcedAligner精准定位音频中的每个词语
  • SQL Server容器化实战:用Docker同时运行2017和2008双版本的技巧
  • 腾讯龙虾矩阵落地:企业级AI Agent快速集成最佳实践
  • Windows上安装nvm
  • 爱思唯尔返修提交LaTeX手稿生成PDF乱码问题结果
  • Realistic Vision V5.1显存优化技术解析:CPU offload机制在SD1.5模型中的应用
  • 第7章:Docker network网络管理(docker网络使用与管理)
  • Qwen3-TTS-12Hz-1.7B-VoiceDesign效果展示:中文古诗吟诵+日文俳句朗读风格对比
  • 机器人灵巧手轻量化方案:从PEEK精密注塑到核心部件的降本量产
  • 重磅首发!OpenClaw养虾宝典,189页+9大模块+100多场景:从小白到高手(附pdf完整版)
  • Arduino实战指南 -- AS608光学指纹模块的智能门禁系统搭建
  • 《B4034 [GESP202409 一级] 小杨购物》
  • Phi-3-Mini-128K入门必看:streaming=True对长文本生成体验的提升
  • FastGPT本地AI智能客服:从零搭建到生产环境部署的避坑指南