docs: 补充JSON序列化选型规范、ViewModel规则及项目目录结构

This commit is contained in:
2026-08-04 18:13:14 +08:00
parent 2b6fc78334
commit 48dc443a31
2 changed files with 43 additions and 8 deletions

View File

@@ -180,6 +180,34 @@
- 签名文件与密码通过 `config.gradle` / CI 环境变量注入,不进版本库。
- 客户端凭据一律加密存储Android: security-cryptoFlutter: secure_storageiOS: Keychain
### JSON / 序列化库选型规范
- **禁止使用 fastjson**。
- 各平台按以下原则选型:
| 平台 / 语言 | 推荐库 | 备选 |
|---|---|---|
| Spring BootJava | **Jackson**`spring-boot-starter-web` 已内置) | — |
| AndroidJava | **Gson** | Jackson体积稍大但功能更强 |
| AndroidKotlin | **kotlinx.serialization** | Moshi已有技术积累的项目可沿用 |
| 纯后端 Kotlin非 Spring Boot | **kotlinx.serialization** | Jackson |
| iOSSwift | **Codable**(系统原生) | — |
| FlutterDart | **json_annotation + json_serializable + freezed** | — |
- **例外流程**:若因第三方依赖必须使用其他库,需提交技术评审并锁定版本、开启安全扫描。
### ViewModel 规则
* **绝不持有 Context**ViewModel 中**严格禁止**持有 `Context``Activity``Fragment``View` 的引用。若需要 `Application Context`,请继承 `AndroidViewModel`(但优先推荐使用 Hilt 注入所需依赖)。
* **数据暴露规范**
* 对外只暴露不可变的 `LiveData<T>`
* 内部维护私有的 `MutableLiveData<T>`
* 示例:
```java
private final MutableLiveData<UserUiState> _uiState = new MutableLiveData<>();
public LiveData<UserUiState> getUiState() {
return _uiState;
}
```
### 代码修改
- 优先做**最小化定向修改**,不要对既有大文件做整体重写或重构。
- 修改前先读取文件当前内容,避免基于陈旧上下文编辑。