Skip to content

Feature 模块概览

业务代码全部位于 app/src/main/java/com/joker/kit/feature,每个功能域(authmainuser 等)拥有独立的 navigation/viewmodel/view/component/ 目录,与 core/* 提供的基础能力进行解耦。Feature 层不提供通用逻辑,而是承载“项目自己实现的业务”,因此文档只约束目录、命名、状态写法,剩余部分由实际业务自行扩展。

目录结构约定

feature/user 为例:

目录说明
navigation/定义当前模块的 NavGraphBuilder 扩展(例如 userInfoScreen)、Graph 聚合方法(userGraph)以及路由常量。
viewmodel/存放与页面对应的 ViewModel,继承 BaseViewModel 或网络基类,负责状态与副作用。
view/Compose 页面实现,通常分为 RouteScreenContent 几层,并引用 core/ui 的组件。
component/可选,用于提取模块内部共享的 UI 片段(如卡片、列表项等)。

其他 Feature 可复制这套结构,确保多人协作时目录统一、职责明确。如果某个模块没有共享组件,可以忽略 component/ 目录,保持最小化即可。

与 Core 的关系

Feature 只做“消费端”工作,所有通用逻辑都来自 core/*

  • 导航:通过 BaseViewModelAppNavigator 调用类型安全路由,Graph 则由 Feature 自己注册。详情见“导航”章节。
  • 状态与数据:直接注入 GoodsRepositoryUserStatecore 提供的依赖;网络、数据库、DataStore 都在仓库层统一处理。
  • UI 规范:引用 core/designsystem 的尺寸/颜色,复用 core/ui 的骨架、空态、刷新容器等。

这种设计使得核心能力只需维护一份,实现 Feature 时可以专注业务流程。

建议的开发流程

  1. 定义路由:在 navigation/routes/* 中声明 @Serializable 路由对象,新建模块时同步新增 Graph。
  2. 创建 ViewModel:利用 BaseNetWorkViewModel/BaseNetWorkListViewModel 等基类,绑定仓库与 UI 状态。
  3. 实现 UI:可沿用“Route -> Screen -> Content”的拆分方式(详见“创建页面流程”章节),在 Route 层处理导航/刷新,在 Screen 层组合布局,在 Content 层拆出可复用组件。
  4. 联调与文档:页面完成后,在 docs/help/feature/* 中补充目录、命名等说明,方便下一位开发者接手。

模板示例会在后续专门的“页面模板”文档中提供,线上部署后即可直接复制使用,无需依赖本地 context/template 目录。

相关文档

Feature 章节只负责约束“如何组织业务目录、如何与 Core 协作”。具体业务实现、组件样式、表单逻辑等均由各模块自行扩展。