JetBrains向导生成的composeApp/与shared/模块架构差异及职责咨询
核心定位区别
- composeApp/:专门负责UI界面与用户交互的模块,所有和Compose渲染直接相关的代码都放在这里,是用户能直观接触到的部分。
- shared/:承载跨平台通用的业务逻辑、数据处理及工具代码,完全不依赖Compose框架,就算后续更换UI框架,这部分代码也能直接复用。
各自该存放的内容
composeApp/
- commonMain:跨平台通用的Compose组件(比如通用按钮、列表布局)、页面导航逻辑、UI与状态绑定的代码(比如将ViewModel数据渲染成界面)
- androidMain:Android专属的UI适配(比如Material3主题的Android特有配置、权限申请弹窗)
- iosMain:iOS专属的UI适配(比如Cupertino风格组件、iOS状态栏适配)
- 其他平台源集:对应平台的Compose UI定制代码
shared/
- commonMain:核心业务逻辑(比如登录校验、数据解析)、数据层代码(Repository、数据源封装)、通用工具类(日期处理、字符串工具)、纯逻辑的ViewModel(不带UI绑定的部分)、数据模型(data class)
- androidMain:Android特有的逻辑实现(比如用Android原生API做本地存储)
- iosMain:iOS特有的逻辑实现(比如适配iOS的网络配置)
两者的关联
- composeApp依赖shared:UI层需要调用业务逻辑和数据,所以composeApp的Gradle配置里会引入shared模块。
- shared不依赖composeApp:业务逻辑层不需要知晓UI的具体实现,保证了逻辑的独立性,就算以后不用Compose,shared的代码依然能正常使用。
- 交互靠数据模型和状态类:shared层提供状态数据,composeApp监听状态更新界面;用户操作后,UI层通知shared层执行对应的业务逻辑。
内容的提问来源于stack exchange,提问作者Nishant Jalan
相关产品推荐
相关产品推荐

