Skip to content

目录与命名规范

Feature 层文件全部位于 app/src/main/java/com/joker/kit/feature。每个功能模块(示例:authmainuser、后续扩展的商品/订单等)都应维持一致的目录层级,以便多人协作时快速定位文件。

基础目录结构

feature/
├── auth/
│   ├── navigation/      # 仅放路由、Graph、NavBuilder 扩展
│   ├── viewmodel/       # 与页面一一对应的 ViewModel
│   ├── view/            # Route/Screen/Content Compose 文件
│   └── component/       # (可选) 模块内复用的 UI 片段
├── main/
│   └── ...
└── user/
    └── ...

component/ 目录可选,仅当模块内有可复用 UI 时才创建,以免产生空目录。

命名约定

包 & 文件

  • 包名全部小写,按模块划分:com.joker.kit.feature.goods.view
  • 页面文件:${PageName}Screen.kt,内部包含 Route/Screen/Content 三级函数。
  • ViewModel:${PageName}ViewModel.kt,与页面一一对应。
  • 导航:${PageName}Navigation.kt${ModuleName}Graph.kt,用于组合当前模块的页面。

类 & 函数

  • 视图层遵循三层命名:FooRoute(收集状态)、FooScreen(布局/状态切换)、FooContent(成功态)。
  • ViewModel 使用页面名 + ViewModel,继承 BaseViewModel 或网络基类,公开 StateFlow、回调函数。
  • Graph 函数统一写成 fun NavGraphBuilder.goodsGraph(...) / fun NavGraphBuilder.goodsDetailScreen(),便于在 AppNavHost 中直接调用。

示例:User 模块

feature/user 当前结构如下,可作为基线:

user/
├── navigation/
│   ├── UserGraph.kt
│   └── UserNavigation.kt (提供 userInfoScreen)
├── viewmodel/
│   └── UserInfoViewModel.kt
└── view/
    └── UserInfoScreen.kt

若新增“地址管理”模块,可仿照上面结构创建 feature/address/...,并在 AppNavHost 中注册 addressGraph

校验清单

  • [ ] 模块目录与 auth/main/user 保持一致,不额外嵌套奇怪层级。
  • [ ] 文件命名遵循 ${PageName}Screen.kt / ${PageName}ViewModel.kt / ${ModuleName}Graph.kt
  • [ ] Graph 只负责注册 composable<Route>(),实际逻辑在 ViewModel & 页面内处理。

遵循上述规范可以让 Feature 模块快速扩展,同时保持与 Core 层的解耦,任何人接手都能立即理解结构。