docs: 补充JSON序列化选型规范、ViewModel规则及项目目录结构
This commit is contained in:
28
AGENTS.md
28
AGENTS.md
@@ -180,6 +180,34 @@
|
|||||||
- 签名文件与密码通过 `config.gradle` / CI 环境变量注入,不进版本库。
|
- 签名文件与密码通过 `config.gradle` / CI 环境变量注入,不进版本库。
|
||||||
- 客户端凭据一律加密存储(Android: security-crypto;Flutter: secure_storage;iOS: Keychain)。
|
- 客户端凭据一律加密存储(Android: security-crypto;Flutter: secure_storage;iOS: Keychain)。
|
||||||
|
|
||||||
|
### JSON / 序列化库选型规范
|
||||||
|
- **禁止使用 fastjson**。
|
||||||
|
- 各平台按以下原则选型:
|
||||||
|
|
||||||
|
| 平台 / 语言 | 推荐库 | 备选 |
|
||||||
|
|---|---|---|
|
||||||
|
| Spring Boot(Java) | **Jackson**(`spring-boot-starter-web` 已内置) | — |
|
||||||
|
| Android(Java) | **Gson** | Jackson(体积稍大但功能更强) |
|
||||||
|
| Android(Kotlin) | **kotlinx.serialization** | Moshi(已有技术积累的项目可沿用) |
|
||||||
|
| 纯后端 Kotlin(非 Spring Boot) | **kotlinx.serialization** | Jackson |
|
||||||
|
| iOS(Swift) | **Codable**(系统原生) | — |
|
||||||
|
| Flutter(Dart) | **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;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### 代码修改
|
### 代码修改
|
||||||
- 优先做**最小化定向修改**,不要对既有大文件做整体重写或重构。
|
- 优先做**最小化定向修改**,不要对既有大文件做整体重写或重构。
|
||||||
- 修改前先读取文件当前内容,避免基于陈旧上下文编辑。
|
- 修改前先读取文件当前内容,避免基于陈旧上下文编辑。
|
||||||
|
|||||||
@@ -50,17 +50,19 @@
|
|||||||
```
|
```
|
||||||
com.ttstd.controller
|
com.ttstd.controller
|
||||||
├── App.java // Application 子类:初始化 MMKV、Room、全局依赖
|
├── App.java // Application 子类:初始化 MMKV、Room、全局依赖
|
||||||
├── MainActivity.java // 唯一入口 Activity,承载 NavHost
|
|
||||||
│
|
│
|
||||||
├── ui/ // 表现层(UI)
|
├── ui/ // 表现层 UI (按 Feature 分包)
|
||||||
|
│ ├── base/ // 基类
|
||||||
|
│ ├── main/ // 主功能
|
||||||
|
│ │ ├── MainActivity.java
|
||||||
|
│ │ ├── MainViewModel.java
|
||||||
|
│ │ └── MainUiState.java
|
||||||
│ ├── home/ // 首页 / 设备列表
|
│ ├── home/ // 首页 / 设备列表
|
||||||
│ │ ├── HomeFragment.java
|
│ │ ├── HomeFragment.java
|
||||||
│ │ ├── HomeViewModel.java
|
│ │ └── HomeViewModel.java
|
||||||
│ │ └── fragment_home.xml
|
|
||||||
│ ├── control/ // 远程控制界面(投屏观看 + 触控下发)
|
│ ├── control/ // 远程控制界面(投屏观看 + 触控下发)
|
||||||
│ │ ├── ControlFragment.java
|
│ │ ├── ControlFragment.java
|
||||||
│ │ ├── ControlViewModel.java
|
│ │ └── ControlViewModel.java
|
||||||
│ │ └── fragment_control.xml
|
|
||||||
│ ├── login/ // 激活 / 登录
|
│ ├── login/ // 激活 / 登录
|
||||||
│ └── common/ // 共享 UI(BaseFragment、适配器、自定义 View)
|
│ └── common/ // 共享 UI(BaseFragment、适配器、自定义 View)
|
||||||
│
|
│
|
||||||
@@ -75,6 +77,7 @@ com.ttstd.controller
|
|||||||
│ │ └── pref/ // MMKV 封装(非敏感)
|
│ │ └── pref/ // MMKV 封装(非敏感)
|
||||||
│ ├── remote/ // 网络(Retrofit API 接口、WebSocket 信令客户端)
|
│ ├── remote/ // 网络(Retrofit API 接口、WebSocket 信令客户端)
|
||||||
│ │ ├── api/ // REST 接口定义
|
│ │ ├── api/ // REST 接口定义
|
||||||
|
│ │ ├── model/
|
||||||
│ │ └── signaling/ // WebSocket 信令连接与消息收发
|
│ │ └── signaling/ // WebSocket 信令连接与消息收发
|
||||||
│ ├── signaling/ // 信令消息(JSON)数据类 / 解析
|
│ ├── signaling/ // 信令消息(JSON)数据类 / 解析
|
||||||
│ ├── proto/ // 由 app/src/main/proto/*.proto 生成的指令类 + 编解码封装
|
│ ├── proto/ // 由 app/src/main/proto/*.proto 生成的指令类 + 编解码封装
|
||||||
@@ -93,6 +96,10 @@ com.ttstd.controller
|
|||||||
├── service/ // 前台 / 后台 Service(如保活、长连接)
|
├── service/ // 前台 / 后台 Service(如保活、长连接)
|
||||||
│ └── SignalingService.java
|
│ └── SignalingService.java
|
||||||
│
|
│
|
||||||
|
├── receiver/ # 全局 BroadcastReceiver(系统级广播)
|
||||||
|
│ ├── BootCompletedReceiver.java # 开机启动
|
||||||
|
│ └── NetworkChangeReceiver.java # 网络变化
|
||||||
|
│
|
||||||
└── utils/ // 工具类(线程、日志、权限、网络状态)
|
└── utils/ // 工具类(线程、日志、权限、网络状态)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user