数据模型
相关依赖
- kotlinx-serialization JSON:https://github.com/Kotlin/kotlinx.serialization
- Retrofit Kotlinx converter:https://github.com/JakeWharton/retrofit2-kotlinx-serialization-converter
- 版本配置:
gradle/libs.versions.toml中的kotlinx-serialization-json、retrofit2-kotlinx-serialization-converter
app/src/main/java/com/joker/kit/core/model 汇总了项目中所有可序列化的数据结构:实体、网络响应、请求体以及常用的基础模型。它们作为“数据层的语言”在网络、数据库、DataStore、Repository 之间传递,确保上下游使用统一的字段与类型。
目录结构
| 目录 | 说明 |
|---|---|
entity/ | 领域实体:Auth、User、Goods 等,与业务语义一致,可直接序列化。 |
request/ | 请求体:例如 GoodsSearchRequest。 |
network/ | 通用网络响应封装:NetworkResponse<T>、NetworkPageData<T>、NetworkPageMeta。 |
common/ | 常用基础模型,如仅返回 ID 的接口可复用 Id、Ids。 |
所有模型默认使用 @Serializable,可通过 kotlinx.serialization 在 Retrofit/Ktor、DataStore 等场景统一解析。
关键实体(可根据业务调整)
Auth
- 描述认证 token 与刷新 token。
- 包含
isExpired()、isRefreshTokenExpired()、shouldRefresh()等辅助方法,方便仓库或拦截器判断是否需要刷新。
User
- 描述用户信息(头像、昵称、手机号、状态等),配合
UserInfoRepository和UserInfoStoreRepository使用。 - 字段仅供参考,实际项目可依业务调整;当 DataStore 读写用户信息时,直接序列化
User实体即可。
Goods
- 用于演示网络分页解析的示例实体,与
GoodsRepository的演示接口对应;如果项目无商品模块可删除或替换成自己的实体。 - 包含
pics、contentPics等可选字段,展示如何在数据类里处理可选/列表字段。
网络模型(建议按业务自定义)
NetworkResponse<T>:当前示例假设后端返回code/message/data结构,code == 1000视为成功。若你的接口字段不同,请在此文件中对齐定义。NetworkPageData<T> / NetworkPageMeta:示例分页结构(list + pagination.total/size/page),仅供参考。很多接口会把分页字段直接裸露在顶层或命名不同,请按自己的接口标准修改,以免解析出错。
请求模型
- 例如
GoodsSearchRequest,记录page、size等分页参数,方便仓库构建请求并保持类型安全。 - 所有请求体均支持
@Serializable,可直接作为 Retrofit/Ktor 的请求对象。
扩展指南
- 新增实体:在
entity/下创建数据类,并加上@Serializable;如包含计算方法,可直接在数据类内实现。 - 新增请求体:在
request/下编写,配合仓库使用,避免在 ViewModel 中手写 Map。 - 更新网络模型:如果后端响应结构发生变化,可在
network/内调整,再统一影响所有仓库。 - 与其他模块联动:新增实体后,别忘了更新对应的 Repository、DataSource、文档,保持字段含义一致。
以上模型都是示例,可随项目实际接口/数据库结构自由调整;关键是保证数据层、仓库、文档对字段的理解一致。借助统一的数据模型层,数据在网络、数据库、DataStore 与 UI 之间传递更加可靠,也能让项目二次开发时更快上手。