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;
}
```
### 代码修改
- 优先做**最小化定向修改**,不要对既有大文件做整体重写或重构。
- 修改前先读取文件当前内容,避免基于陈旧上下文编辑。

View File

@@ -50,17 +50,19 @@
```
com.ttstd.controller
├── App.java // Application 子类:初始化 MMKV、Room、全局依赖
├── MainActivity.java // 唯一入口 Activity承载 NavHost
├── ui/ // 表现层UI
├── ui/ // 表现层 UI (按 Feature 分包
│ ├── base/ // 基类
│ ├── main/ // 主功能
│ │ ├── MainActivity.java
│ │ ├── MainViewModel.java
│ │ └── MainUiState.java
│ ├── home/ // 首页 / 设备列表
│ │ ├── HomeFragment.java
│ │ ── HomeViewModel.java
│ │ └── fragment_home.xml
│ │ ── HomeViewModel.java
│ ├── control/ // 远程控制界面(投屏观看 + 触控下发)
│ │ ├── ControlFragment.java
│ │ ── ControlViewModel.java
│ │ └── fragment_control.xml
│ │ ── ControlViewModel.java
│ ├── login/ // 激活 / 登录
│ └── common/ // 共享 UIBaseFragment、适配器、自定义 View
@@ -74,8 +76,9 @@ com.ttstd.controller
│ │ ├── secure/ // EncryptedSharedPreferences 封装(凭据存储)
│ │ └── pref/ // MMKV 封装(非敏感)
│ ├── remote/ // 网络Retrofit API 接口、WebSocket 信令客户端)
│ │ ├── api/ // REST 接口定义
│ │ ── signaling/ // WebSocket 信令连接与消息收发
│ │ ├── api/ // REST 接口定义
│ │ ── model/
│ │ └── signaling/ // WebSocket 信令连接与消息收发
│ ├── signaling/ // 信令消息JSON数据类 / 解析
│ ├── proto/ // 由 app/src/main/proto/*.proto 生成的指令类 + 编解码封装
│ └── repository/ // 仓储:向 UI 暴露单一数据源(组合 local + remote
@@ -93,6 +96,10 @@ com.ttstd.controller
├── service/ // 前台 / 后台 Service如保活、长连接
│ └── SignalingService.java
├── receiver/ # 全局 BroadcastReceiver系统级广播
│ ├── BootCompletedReceiver.java # 开机启动
│ └── NetworkChangeReceiver.java # 网络变化
└── utils/ // 工具类(线程、日志、权限、网络状态)
```