docs: 补充JSON序列化选型规范、ViewModel规则及项目目录结构
This commit is contained in:
28
AGENTS.md
28
AGENTS.md
@@ -180,6 +180,34 @@
|
||||
- 签名文件与密码通过 `config.gradle` / CI 环境变量注入,不进版本库。
|
||||
- 客户端凭据一律加密存储(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
|
||||
├── 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/ // 共享 UI(BaseFragment、适配器、自定义 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/ // 工具类(线程、日志、权限、网络状态)
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user