修改百度地图AK

This commit is contained in:
xuqiuyun
2025-11-04 09:38:19 +08:00
parent 4b6d14a6ec
commit eacb0453dd
52 changed files with 3865 additions and 65 deletions

View File

@@ -0,0 +1,194 @@
---
description: Android 原生开发约定和最佳实践,包括 Kotlin、Jetpack Compose、架构模式等
globs: **/*.kt,**/*.java,**/*.xml
alwaysApply: false
---
# Android 开发规范
## 项目结构和模块化
- 使用标准的 Android 项目结构
- 按功能模块组织代码,实现模块化架构
- 使用 Gradle Version Catalogs 管理依赖版本
- 合理划分 `app`、`feature`、`core`、`data` 模块
- 遵循包命名约定:`com.company.app.feature.domain`
- 分离 `presentation`、`domain`、`data` 层
## 编程语言和代码规范
- **强制使用 Kotlin**,避免 Java除非维护遗留代码
- 遵循 [Kotlin 编码规范](mdc:languages/kotlin.mdc)
- 优先使用数据类、密封类和内联类
- 合理使用扩展函数增强现有 API
- 使用协程和 Flow 进行异步编程
- 避免使用 `!!` 操作符,优先使用安全调用
## UI 开发
### Jetpack Compose推荐
- **优先使用 Jetpack Compose** 构建现代声明式 UI
- 遵循 Composition over inheritance 原则
- 使用 `@Composable` 函数构建可重用组件
- 正确使用 `remember`、`LaunchedEffect`、`derivedStateOf`
- 实现 `CompositionLocal` 进行依赖传递
- 使用 `Modifier` 进行样式和行为定制
### 传统 View 系统
- 使用 View Binding 替代 `findViewById`
- 避免使用 Data Binding除非必要
- 正确使用 `ConstraintLayout` 和 `RecyclerView`
- 实现自定义 View 时遵循测量、布局、绘制流程
### 设计规范
- 遵循 **Material Design 3** 设计规范
- 实现动态颜色主题Material You
- 支持深色主题和高对比度模式
- 实现响应式布局适配不同屏幕尺寸
- 使用 `WindowInsets` 处理状态栏和导航栏
## 架构模式
### 推荐架构
- 使用 **MVVM** 或 **MVI** 架构模式
- 遵循 **Clean Architecture** 原则
- 实现 **Repository 模式** 进行数据抽象
- 使用 **UseCase/Interactor** 封装业务逻辑
- 采用 **单向数据流** 设计
### ViewModel 最佳实践
- 使用 `ViewModel` 管理 UI 相关数据
- 通过 `StateFlow`/`LiveData` 暴露状态
- 在 `ViewModel` 中处理业务逻辑
- 正确使用 `viewModelScope` 管理协程
- 避免在 `ViewModel` 中持有 Context 引用
## 依赖注入
- **强制使用 Dagger Hilt** 进行依赖注入
- 正确配置 `@Module`、`@InstallIn`、作用域注解
- 使用 `@Qualifier` 区分相同类型的不同实现
- 避免循环依赖,合理设计依赖关系
- 使用 `@Provides` 和 `@Binds` 提供依赖
- 在测试中使用 `@TestInstallIn` 替换模块
## 数据层实现
### 本地存储
- 使用 **Room** 数据库进行复杂数据存储
- 使用 **DataStore** 替代 SharedPreferences
- 正确实现数据库迁移策略
- 使用 `@TypeConverter` 处理复杂数据类型
- 实现数据访问对象DAO模式
### 缓存策略
- 实现 **Repository** 模式统一数据访问
- 使用 `@Query` 和 `Flow` 实现响应式数据
- 实现离线优先Offline-first策略
- 正确处理缓存失效和数据同步
## 网络层
- 使用 **Retrofit** 进行 REST API 调用
- 使用 **OkHttp** 拦截器处理认证、日志、缓存
- 实现适当的错误处理和重试机制
- 使用 **Moshi** 或 **Kotlinx Serialization** 进行 JSON 解析
- 正确处理网络连接状态变化
- 实现请求去重和防抖动
## 异步编程和响应式
- **强制使用 Kotlin Coroutines** 进行异步编程
- 正确使用 `suspend` 函数和协程作用域
- 使用 **Flow** 进行响应式数据流编程
- 正确使用 `collectAsState()`、`collectAsStateWithLifecycle()`
- 避免使用 `GlobalScope`,使用结构化并发
- 正确处理协程取消和异常
## 生命周期管理
- 正确处理 Activity 和 Fragment 生命周期
- 使用 **Lifecycle-aware** 组件(`LifecycleObserver`
- 在 Compose 中使用 `DisposableEffect` 管理资源
- 使用 `viewLifecycleOwner` 在 Fragment 中观察数据
- 避免在组件销毁后执行异步操作
## 导航和路由
- 使用 **Navigation Component** 进行页面导航
- 在 Compose 中使用 **Compose Navigation**
- 正确处理深度链接Deep Links
- 使用 Safe Args 进行类型安全的参数传递
- 实现单一 Activity 多 Fragment 架构
## 性能优化
### 渲染性能
- 使用 **Baseline Profiles** 优化应用启动
- 避免过度绘制和布局嵌套
- 正确使用 `RecyclerView` 的 `ViewHolder` 模式
- 在 Compose 中合理使用 `key()` 和 `remember()`
### 内存管理
- 避免内存泄漏,正确管理对象生命周期
- 使用 **LeakCanary** 检测内存泄漏
- 合理使用图片加载库Glide、Coil
- 实现懒加载和分页加载
### 启动优化
- 使用 **App Startup** 优化初始化流程
- 实现启动画面Splash Screen API
- 避免在 Application 中执行耗时操作
## 测试策略
### 单元测试
- 为业务逻辑编写单元测试,目标覆盖率 ≥80%
- 使用 **MockK** 进行 Kotlin 友好的模拟测试
- 使用 **Truth** 断言库提高测试可读性
- 测试 Repository、UseCase、ViewModel 层
### UI 测试
- 使用 **Compose Test** 测试 Compose UI
- 使用 **Espresso** 测试传统 View 系统
- 实现端到端测试覆盖关键用户流程
- 使用 **Hilt Testing** 进行依赖注入测试
## 安全实践
- 正确实现运行时权限请求
- 使用 **Android Keystore** 存储敏感数据
- 实现网络安全配置Network Security Config
- 使用 **Certificate Pinning** 防止中间人攻击
- 避免在日志中输出敏感信息
- 实现代码混淆和反调试措施
## 国际化和无障碍
- 实现多语言支持i18n
- 使用 **TalkBack** 测试无障碍功能
- 为 UI 元素添加 `contentDescription`
- 支持从右到左RTL布局
- 实现动态字体大小适配
## 构建和发布
### 构建配置
- 使用 **Gradle Kotlin DSL** 编写构建脚本
- 配置多变体构建Debug/Release/Staging
- 使用 **R8** 进行代码收缩和混淆
- 实现自动化版本管理
### 发布流程
- 使用 **Android App BundleAAB** 进行发布
- 配置应用签名和密钥管理
- 实现渐进式发布和 A/B 测试
- 使用 **Play Console** 进行应用分析
## 代码质量保证
- 使用 **Detekt** 进行静态代码分析
- 配置 **Lint** 检查规则
- 使用 **ktfmt** 或 **ktlint** 进行代码格式化
- 实现 CI/CD 流水线进行自动化检查
- 定期进行代码审查Code Review

View File

@@ -0,0 +1,67 @@
---
description: 该规则解释了 Android 原生开发的约定和最佳实践,包括 Kotlin、Java、Jetpack Compose 等。
globs: **/*.kt,**/*.java,**/*.xml
alwaysApply: false
---
<!-- 来源https://github.com/flyeric0212/cursor-rules/issues/4 -->
# Android 开发规则
## 通用规则
1. 默认情况下,所有回复都必须是中文,而且需要在开头称呼用户为"帅哥:"
2. 复杂需求拆解成小任务,分步实现,每完成一个小任务后再继续
3. 代码实现前后要仔细检查,确保类型安全、空安全处理完整、生命周期管理正确
4. 在已有功能基础上添加新功能时,必须确保:
- 不影响原有功能和组件复用性
- 不添加其他功能、代码、逻辑、文件、配置、依赖
5. 遵循项目架构设计,保持代码风格与 Android 编码规范一致(如 Kotlin 风格指南)
6. 组件设计遵循单一职责原则,不混合多个变更
7. 在进行组件设计规划时,符合"第一性原理"
8. 在代码实现时,符合"KISS原则"和"SOLID原则"
9. 优先使用 Android Jetpack 组件库和现有工具类,避免重复代码
10. 不引入不必要的依赖,优先使用项目已有库
11. 确保代码可读性,复杂逻辑添加注释,类和接口参数详细定义
12. 代码变更范围最小化,避免修改公共组件、全局状态
13. 实现后进行基本逻辑自检,确保生命周期管理和内存泄漏处理正确
14. 如有疑问,先询问再修改,不要擅自改变组件 API 设计
## 自动化执行与安全策略
15. 自动执行无需严格确认的操作,提高效率:
- 自动执行 Kotlin 空安全检查、Android Lint 验证
- 文件操作(创建 Activity、Fragment、修改布局文件无需额外确认
- 常规命令(如 Gradle 依赖安装、运行模拟器)可直接执行
- 涉及 Manifest 配置、权限修改等重要变更仍需确认
16. 重要操作(修改 Application 类、AndroidManifest.xml应先保留副本
17. 涉及 API 接口变更,优先修改数据模型类和接口定义
18. 执行影响较大的修改前,自动检测组件依赖关系,分析影响范围
## 代码质量优化
19. 代码生成后,自动优化(移除未使用导入、合并重复资源文件)
20. 对可能影响性能的代码(如主线程阻塞、过度绘制、内存泄漏风险)提供优化建议
21. 确保异常处理和加载状态管理,防止应用崩溃和 ANR
## 架构感知
22. 优先分析现有架构模式MVC/MVP/MVVM/Clean Architecture与依赖注入方式避免创建冗余组件
23. 添加功能时,优先考虑复用 ViewModel、Repository 或现有组件
24. 如遇架构不清晰,先梳理组件层次与数据流,再执行修改
## 代码变更的可追溯性
25. 提供清晰的 commit 信息,描述组件变更和影响范围
26. 对于 UI 组件重大调整,生成变更文档与截图对比
27. API 或接口变更时,提供向下兼容方案或迁移指南
28. 执行任务前,先分析项目结构和组件关系文档
29. 每次修改后,生成任务总结,说明组件变更和状态管理调整
30. 手动维护组件文档与架构说明,确保长期可维护性
## Android 开发规则
31. 严格遵循 Android 生命周期管理,避免内存泄漏和崩溃
32. 处理好 Activity/Fragment 之间的数据传递,优先使用 ViewModel 共享数据
33. UI 操作必须在主线程执行,耗时操作放在工作线程
34. 合理使用协程Kotlin或 RxJavaJava进行异步操作
35. 注意适配不同屏幕尺寸和系统版本的兼容性问题
36. 使用 Android Jetpack 组件(如 Navigation、Room、WorkManager提高开发效率
37. 遵循 Material Design 设计规范,保持 UI 一致性
38. 注意权限管理和安全性,特别是涉及敏感数据的操作
39. 优化应用启动速度和 UI 渲染性能
40. 合理使用资源文件strings.xml、colors.xml、styles.xml提高可维护性

View File

@@ -0,0 +1,38 @@
---
description: Django 后端开发的约定和最佳实践。
globs: **/*.py
alwaysApply: false
---
# Django 规则
- 使用 `python manage.py startapp` 在项目中创建新应用
- 在 `models.py` 中保存模型,并在 `admin.py` 中注册以使用管理界面
- 使用 Django 的 ORM 而非原始 SQL 查询
- 使用 `select_related` 和 `prefetch_related` 避免 N+1 查询问题:
```python
# 良好模式
users = User.objects.select_related('profile')
posts = Post.objects.prefetch_related('tags')
```
- 使用 Django 表单进行验证:
```python
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ['username', 'email']
```
- 为常见查询创建自定义模型管理器:
```python
class ActiveUserManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(is_active=True)
```
- 使用 Django 内置的身份验证系统
- 在环境变量中存储设置并通过 `settings.py` 访问

View File

@@ -0,0 +1,16 @@
---
description: FastAPI 高性能 Python API 的约定和最佳实践。
globs: **/*.py
alwaysApply: false
---
# FastAPI 规则
- 为所有函数参数和返回值使用类型提示
- 使用 Pydantic 模型进行请求和响应验证
- 在路径操作装饰器中使用适当的 HTTP 方法(@app.get、@app.post 等)
- 使用依赖注入实现共享逻辑,如数据库连接和身份验证
- 使用后台任务background tasks进行非阻塞操作
- 使用适当的状态码进行响应201 表示创建404 表示未找到等)
- 使用 APIRouter 按功能或资源组织路由
- 适当使用路径参数、查询参数和请求体

View File

@@ -0,0 +1,16 @@
---
description: Flask 轻量级 Python Web 应用程序的约定和最佳实践。
globs: **/*.py
alwaysApply: false
---
# Flask 规则
- 使用 Blueprints 按功能或资源组织路由
- 使用 Flask-SQLAlchemy 处理数据库模型和 ORM
- 使用应用工厂application factories实现灵活的应用初始化
- 使用 Flask 扩展实现常见功能Flask-Login、Flask-WTF 等)
- 在环境变量中存储配置
- 使用 Flask-Migrate 进行数据库迁移
- 使用错误处理器实现适当的错误处理
- 使用 Flask-RESTful 或类似工具构建 API

View File

@@ -0,0 +1,41 @@
---
description: 该规则解释了 Flutter 小部件模式和跨平台移动开发的最佳实践。
globs: **/*.dart
alwaysApply: false
---
# Flutter 规则
- 对于没有内部状态的 UI 组件使用 StatelessWidget。
- 对于需要维护状态的组件使用 StatefulWidget
```dart
class Counter extends StatefulWidget {
@override
_CounterState createState() => _CounterState();
}
class _CounterState extends State<Counter> {
int _count = 0;
void _increment() {
setState(() { _count++; });
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('Count: $_count'),
ElevatedButton(onPressed: _increment, child: Text('Increment')),
],
);
}
}
```
- 对于复杂应用使用状态管理解决方案Provider、Bloc、Riverpod
- 使用适当的文件夹结构组织代码models、screens、widgets、services
- 使用命名路由和 Navigator.pushNamed() 进行导航。
- 使用 async/await 处理异步操作,并进行适当的错误处理。
- 使用主题themes在整个应用中保持一致的样式。

View File

@@ -0,0 +1,21 @@
---
description: 该规则解释了 Next.js 全栈开发的约定和最佳实践。
globs: **/*.js,**/*.jsx,**/*.ts,**/*.tsx
alwaysApply: false
---
# Next.js 规则
- 使用 App Router 结构,在路由目录中使用 `page.tsx` 文件。
- 客户端组件必须在文件顶部明确标记 `'use client'`。
- 目录名使用 kebab-case例如 `components/auth-form`),组件文件使用 PascalCase。
- 优先使用命名导出而非默认导出,即使用 `export function Button() { /* ... */ }` 而不是 `export default function Button() { /* ... */ }`。
- 尽量减少 `'use client'` 指令:
- 保持大多数组件为 React Server Components (RSC)
- 仅在需要交互性时使用客户端组件,并用带有 fallback UI 的 `Suspense` 包装
- 为交互元素创建小型客户端组件包装器
- 尽可能避免不必要的 `useState` 和 `useEffect`
- 使用服务器组件进行数据获取
- 使用 React Server Actions 处理表单
- 使用 URL 搜索参数实现可共享状态
- 使用 `nuqs` 管理 URL 搜索参数状态

View File

@@ -0,0 +1,104 @@
---
description: 该规则解释了 TypeScript、React Native、Expo 和移动 UI 开发的使用方法和最佳实践。
globs: **/*.jsx,**/*.tsx
alwaysApply: false
---
# TypeScript、React Native、Expo 和移动 UI 开发规则
## 代码风格和结构
- 编写清晰、可读的代码:确保你的代码易于阅读和理解。为变量和函数使用描述性名称。
- 使用函数组件优先使用带有钩子useState, useEffect 等)的函数组件,而非类组件。
- 组件模块化:将组件拆分为更小、可重用的部分。保持组件专注于单一职责。
- 按功能组织文件将相关组件、钩子和样式按功能特性分组到目录中例如user-profile
## 命名约定
- 变量和函数:使用驼峰命名法(camelCase)命名变量和函数并具有描述性例如isFetchingData, handleUserInput
- 组件:使用帕斯卡命名法(PascalCase)命名组件例如UserProfile
- 目录使用小写和连字符命名目录例如user-profile
## TypeScript 使用
- 所有代码使用 TypeScript接口(interfaces)优于类型(types)
- 避免使用枚举(enums);使用映射(maps)代替
- 使用带有 TypeScript 接口的函数组件
- 在 TypeScript 中使用严格模式以提高类型安全性
## 语法和格式
- 使用 "function" 关键字定义纯函数
- 避免在条件语句中使用不必要的花括号;简单语句使用简洁语法
- 使用声明式 JSX
- 使用 Prettier 保持代码格式一致
## UI 和样式
- 使用 Expo 内置组件实现常见 UI 模式和布局
- 使用 Flexbox 和 Expo 的 useWindowDimensions 实现响应式设计
- 使用 styled-components 或 Tailwind CSS 进行组件样式设计
- 使用 Expo 的 useColorScheme 实现深色模式支持
- 确保高可访问性(a11y)标准,使用 ARIA 角色和原生可访问性属性
- 利用 react-native-reanimated 和 react-native-gesture-handler 实现高性能动画和手势
## 安全区域管理
- 使用 react-native-safe-area-context 中的 SafeAreaProvider 全局管理安全区域
- 用 SafeAreaView 包装顶层组件,处理 iOS 和 Android 上的刘海、状态栏和其他屏幕缩进
- 使用 SafeAreaScrollView 处理可滚动内容,确保其尊重安全区域边界
- 避免为安全区域硬编码内边距或外边距;依赖 SafeAreaView 和上下文钩子
## 性能优化
- 最小化 useState 和 useEffect 的使用;优先使用 context 和 reducers 进行状态管理
- 使用 Expo 的 AppLoading 和 SplashScreen 优化应用启动体验
- 优化图像:在支持的地方使用 WebP 格式,包含尺寸数据,使用 expo-image 实现延迟加载
- 使用 React 的 Suspense 和动态导入实现代码分割和非关键组件的懒加载
- 使用 React Native 内置工具和 Expo 调试功能监控性能
- 通过适当使用组件记忆化、useMemo 和 useCallback 钩子避免不必要的重新渲染
## 导航
- 使用 react-navigation 进行路由和导航;遵循其栈导航器、标签导航器和抽屉导航器的最佳实践
- 利用深度链接和通用链接提升用户参与度和导航流程
- 使用 expo-router 的动态路由以获得更好的导航处理
## 状态管理
- 使用 React Context 和 useReducer 管理全局状态
- 利用 react-query 进行数据获取和缓存;避免过多的 API 调用
- 对于复杂的状态管理,考虑使用 Zustand 或 Redux Toolkit
- 使用 expo-linking 等库处理 URL 搜索参数
## 错误处理和验证
- 使用 Zod 进行运行时验证和错误处理
- 使用 Sentry 或类似服务实现适当的错误日志记录
- 优先处理错误和边缘情况:
- 在函数开始时处理错误
- 为错误条件使用提前返回,避免深度嵌套的 if 语句
- 避免不必要的 else 语句;使用 if-return 模式
- 实现全局错误边界以捕获和处理意外错误
- 使用 expo-error-reporter 记录和报告生产环境中的错误
## 测试
- 使用 Jest 和 React Native Testing Library 编写单元测试
- 使用 Detox 为关键用户流程实现集成测试
- 使用 Expo 的测试工具在不同环境中运行测试
- 考虑为组件使用快照测试以确保 UI 一致性
## 安全
- 清理用户输入以防止 XSS 攻击
- 使用 react-native-encrypted-storage 安全存储敏感数据
- 确保使用 HTTPS 和适当的身份验证与 API 进行安全通信
- 使用 Expo 的安全指南保护应用程序https://docs.expo.dev/guides/security/
## 国际化 (i18n)
- 使用 react-native-i18n 或 expo-localization 进行国际化和本地化
- 支持多语言和 RTL 布局
- 确保文本缩放和字体调整以提高可访问性
## 关键约定
1. 依赖 Expo 的托管工作流程简化开发和部署
2. 优先考虑移动 Web 性能指标(加载时间、卡顿和响应性)
3. 使用 expo-constants 管理环境变量和配置
4. 使用 expo-permissions 优雅处理设备权限
5. 实现 expo-updates 进行空中(OTA)更新
6. 遵循 Expo 的应用部署和发布最佳实践https://docs.expo.dev/distribution/introduction/
7. 通过在 iOS 和 Android 平台上进行广泛测试,确保兼容性
## API 文档
- 使用 Expo 官方文档设置和配置项目https://docs.expo.dev/
请参考 Expo 文档获取有关 Views、Blueprints 和 Extensions 的最佳实践详细信息。

View File

@@ -0,0 +1,79 @@
---
description: 该规则解释了 React 组件模式、hooks 使用方法和最佳实践。
globs: **/*.jsx,**/*.tsx
alwaysApply: false
---
# React 规则
## 组件结构
- 优先使用函数组件而非类组件
- 保持组件小巧且专注
- 将可复用逻辑提取到自定义 hook 中
- 使用组合而非继承
- 使用 TypeScript 实现适当的 prop 类型
- 将大型组件拆分为更小、更专注的组件
## Hooks
- 遵循 Hooks 的规则
- 使用自定义 hooks 实现可复用逻辑
- 保持 hooks 专注且简单
- 在 useEffect 中使用适当的依赖数组
- 在需要时在 useEffect 中实现清理功能
- 避免嵌套 hooks
## 状态管理
- 使用 useState 管理组件本地状态
- 使用 useReducer 处理复杂状态逻辑
- 使用 Context API 共享状态
- 将状态尽可能靠近使用它的地方
- 通过适当的状态管理避免 prop drilling
- 仅在必要时使用状态管理库
## 性能
- 实现适当的记忆化(useMemo, useCallback)
- 对开销大的组件使用 React.memo
- 避免不必要的重新渲染
- 实现适当的懒加载
- 在列表中使用适当的 key 属性
- 分析并优化渲染性能
## 表单
- 对表单输入使用受控组件
- 实现适当的表单验证
- 正确处理表单提交状态
- 显示适当的加载和错误状态
- 对复杂表单使用表单库
- 为表单实现适当的可访问性
## 错误处理
- 实现 Error Boundaries
- 正确处理异步错误
- 显示用户友好的错误信息
- 实现适当的备用 UI
- 适当记录错误
- 优雅处理边缘情况
## 测试
- 为组件编写单元测试
- 为复杂流程实现集成测试
- 使用 React Testing Library
- 测试用户交互
- 测试错误场景
- 实现适当的模拟数据
## 可访问性
- 使用语义化 HTML 元素
- 实现适当的 ARIA 属性
- 确保键盘导航
- 使用屏幕阅读器测试
- 管理焦点
- 为图片提供适当的 alt 文本
## 代码组织
- 将相关组件组织在一起
- 使用适当的文件命名约定
- 实现适当的目录结构
- 保持样式靠近组件
- 使用适当的导入/导出
- 记录复杂的组件逻辑

View File

@@ -0,0 +1,293 @@
---
description: Spring Boot 3 企业级最佳实践规范
globs: **/*.java
alwaysApply: false
---
# Spring Boot 3 企业级最佳实践规范
## 1. 配置管理模块
### 1.1 配置文件组织
- **主配置文件**`application.yml` 包含通用配置
- **环境配置**`application-{profile}.yml` 按环境分离
- **配置优先级**:命令行参数 > 环境变量 > 配置文件
- **敏感信息**:使用环境变量或配置中心,禁止硬编码
### 1.2 配置属性绑定
- 使用 `@ConfigurationProperties` 进行类型安全的配置绑定
- 配置类使用 `@Validated` 进行参数校验
- 复杂配置使用嵌套类结构
- 提供默认值和配置文档
### 1.3 多环境管理
- **开发环境**:本地数据库,详细日志,热重载
- **测试环境**:内存数据库,模拟外部服务
- **生产环境**:外部配置,最小日志级别,性能监控
### 1.4 配置最佳实践
- 配置项命名使用 kebab-case
- 布尔值配置明确语义enabled/disabled
- 数值配置包含单位说明
- 定期审查和清理无用配置
## 2. 依赖注入模块
### 2.1 Bean 定义策略
- **组件扫描**:使用 `@Component`、`@Service`、`@Repository`、`@Controller`
- **配置类**:复杂 Bean 使用 `@Configuration` + `@Bean`
- **条件注册**:使用 `@ConditionalOn*` 注解进行条件装配
- **作用域管理**:明确 Bean 的生命周期和作用域
### 2.2 依赖注入方式
- **构造器注入**:推荐方式,保证依赖不可变
- **字段注入**:仅在测试中使用 `@Autowired`
- **Setter注入**:可选依赖使用
- **避免循环依赖**:重构代码结构,使用事件驱动
### 2.3 Bean 生命周期管理
- 使用 `@PostConstruct` 和 `@PreDestroy` 管理生命周期
- 实现 `InitializingBean` 和 `DisposableBean` 接口
- 资源清理在销毁方法中进行
- 异步初始化使用 `@Async` 注解
### 2.4 依赖注入最佳实践
- 接口编程,面向抽象依赖
- 使用 `@Qualifier` 解决多实现问题
- 避免过度依赖,保持类的单一职责
- 使用 `@Primary` 指定默认实现
## 3. 安全模块
### 3.1 认证机制
- **JWT 认证**:无状态认证,适合分布式应用
- **OAuth2 集成**:第三方登录和授权
- **多因素认证**:提高安全级别
- **会话管理**:合理设置超时和并发控制
### 3.2 授权策略
- **基于角色**RBAC 模型,角色权限分离
- **基于资源**:细粒度权限控制
- **方法级安全**:使用 `@PreAuthorize` 和 `@PostAuthorize`
- **URL 级安全**:配置路径访问规则
### 3.3 数据安全
- **输入验证**:所有外部输入必须验证
- **SQL 注入防护**:使用参数化查询
- **XSS 防护**:输出编码和 CSP 策略
- **CSRF 防护**API 使用 Token 验证
### 3.4 安全配置最佳实践
- 最小权限原则,默认拒绝访问
- 敏感操作记录审计日志
- 定期更新安全依赖
- 使用 HTTPS 和安全头配置
## 4. 性能优化模块
### 4.1 应用层优化
- **连接池配置**数据库、Redis、HTTP 客户端
- **线程池调优**:异步任务和定时任务
- **JVM 参数**堆内存、GC 策略、监控参数
- **启动优化**:延迟初始化、条件装配
### 4.2 缓存策略
- **本地缓存**Caffeine 用于热点数据
- **分布式缓存**Redis 用于共享数据
- **缓存层次**L1本地+ L2分布式
- **缓存更新**:写入时更新、定时刷新、事件驱动
### 4.3 数据库优化
- **连接池配置**HikariCP 参数调优
- **查询优化**:索引使用、分页查询、批量操作
- **事务管理**:只读事务、事务传播、超时设置
- **读写分离**:主从配置、路由策略
### 4.4 监控和诊断
- **应用指标**JVM、业务指标、自定义指标
- **性能分析**:慢查询、热点方法识别
- **告警机制**:阈值监控、异常告警
- **健康检查**Actuator 端点监控应用状态
## 5. 数据访问模块
### 5.1 JPA 最佳实践
- **实体设计**:合理的表关系、字段映射、索引策略
- **Repository 模式**:继承 JpaRepository自定义查询方法
- **查询优化**:使用 `@Query` 注解、原生 SQL、Specification
- **懒加载策略**:避免 N+1 问题,合理使用 `@EntityGraph`
### 5.2 事务管理
- **声明式事务**`@Transactional` 注解配置
- **事务传播**:根据业务场景选择传播行为
- **只读事务**:查询操作使用 `readOnly = true`
- **事务超时**:设置合理的超时时间
### 5.3 数据库连接管理
- **连接池配置**:最大连接数、超时设置、健康检查
- **多数据源**:主从分离、分库分表支持
- **连接泄漏检测**:监控长时间占用的连接
- **数据库监控**:连接数、慢查询、死锁检测
### 5.4 数据访问安全
- **参数化查询**:防止 SQL 注入
- **数据脱敏**:敏感数据加密存储
- **访问控制**:数据库用户权限最小化
- **审计日志**:记录数据变更操作
## 6. API 设计模块RESTful
### 6.1 URL 设计规范
- **资源命名**:使用名词复数形式,避免动词
- **层次结构**:体现资源间的关系
- **版本控制**URL 路径或请求头中包含版本信息
- **查询参数**:过滤、排序、分页使用查询参数
### 6.2 HTTP 方法使用
- **GET**:获取资源,幂等操作
- **POST**:创建资源,非幂等操作
- **PUT**:完整更新资源,幂等操作
- **PATCH**:部分更新资源
- **DELETE**:删除资源,幂等操作
### 6.3 响应设计
- **状态码**:正确使用 HTTP 状态码
- **响应格式**:统一的 JSON 响应结构
- **错误处理**:标准化错误响应格式
- **分页响应**:包含总数、页码、页大小信息
### 6.4 API 文档和测试
- **OpenAPI 规范**:使用 Swagger 生成文档
- **接口测试**:单元测试、集成测试、契约测试
- **版本兼容**:向后兼容性保证
- **性能测试**:接口响应时间和并发测试
## 7. 异常处理模块
### 7.1 异常分类
- **业务异常**:可预期的业务逻辑异常
- **系统异常**:不可预期的技术异常
- **验证异常**:参数校验失败异常
- **外部服务异常**:第三方服务调用异常
### 7.2 异常处理策略
- **全局异常处理**:使用 `@ControllerAdvice` 统一处理
- **异常转换**:将底层异常转换为业务异常
- **异常日志**:记录异常堆栈和上下文信息
- **用户友好**:返回用户可理解的错误信息
### 7.3 异常响应格式
- **错误码**:业务错误码和 HTTP 状态码
- **错误信息**:简洁明了的错误描述
- **详细信息**:开发环境提供详细错误信息
- **请求追踪**:包含请求 ID 便于问题定位
### 7.4 异常监控
- **异常统计**:异常类型、频率统计
- **告警机制**:异常阈值告警
- **异常分析**:定期分析异常趋势
- **异常恢复**:自动重试和降级策略
## 8. 测试模块
### 8.1 测试分层策略
- **单元测试**:测试单个类或方法,使用 Mock
- **集成测试**:测试组件间交互,使用 TestContainers
- **端到端测试**:完整业务流程测试
- **性能测试**:负载测试、压力测试
### 8.2 测试工具和框架
- **JUnit 5**:测试框架,支持参数化测试
- **Mockito**Mock 框架,模拟依赖对象
- **TestContainers**:集成测试中使用真实数据库
- **WireMock**:模拟外部 HTTP 服务
### 8.3 测试数据管理
- **测试数据隔离**:每个测试独立的数据环境
- **数据准备**:使用 `@Sql` 或 Builder 模式
- **数据清理**:测试后清理数据,避免影响其他测试
- **测试数据工厂**:统一的测试数据创建
### 8.4 测试质量保证
- **代码覆盖率**:目标覆盖率 80% 以上
- **测试命名**:清晰的测试方法命名
- **断言明确**:使用有意义的断言消息
- **测试维护**:定期更新和重构测试代码
## 9. 日志记录模块
### 9.1 日志级别管理
- **ERROR**:系统错误,需要立即处理
- **WARN**:警告信息,需要关注
- **INFO**:重要业务信息,正常流程记录
- **DEBUG**:调试信息,开发环境使用
### 9.2 日志内容规范
- **结构化日志**:使用 JSON 格式,便于解析
- **上下文信息**:包含用户 ID、请求 ID、业务标识
- **敏感信息**:避免记录密码、身份证等敏感数据
- **性能信息**:记录关键操作的执行时间
### 9.3 日志输出配置
- **控制台输出**:开发环境使用,格式化显示
- **文件输出**:生产环境使用,按日期滚动
- **远程日志**:集中式日志收集,如 ELK Stack
- **日志压缩**:历史日志压缩存储
### 9.4 日志监控和分析
- **日志聚合**:统一收集和存储
- **实时监控**:关键错误实时告警
- **日志分析**:业务指标分析、异常趋势分析
- **日志检索**:快速定位问题日志
## 10. 应用监控模块
### 10.1 Spring Boot Actuator
- **端点配置**:暴露必要的监控端点
- **健康检查**:自定义健康指示器
- **指标收集**JVM、应用、业务指标
- **信息端点**:应用版本、构建信息
### 10.2 自定义监控
- **业务指标**:使用 Micrometer 收集业务数据
- **性能监控**:方法执行时间、数据库查询性能
- **错误监控**:异常统计和分析
- **用户行为**:关键业务操作追踪
### 10.3 日志与监控集成
- **结构化日志**:便于监控系统解析
- **关键事件记录**:业务关键节点日志
- **性能日志**:慢操作和资源使用情况
- **告警配置**:基于日志和指标的告警
### 10.4 生产环境监控
- **应用状态**:启动、运行、关闭状态监控
- **资源使用**内存、CPU、线程池状态
- **外部依赖**:数据库、缓存、第三方服务状态
- **业务监控**:核心业务指标实时监控
## 11. 代码质量模块
### 11.1 编码规范
- **命名规范**:类名、方法名、变量名清晰表达意图
- **代码结构**:合理的包结构和类层次
- **注释规范**:必要的类和方法注释
- **代码复用**:避免重复代码,提取公共方法
### 11.2 设计原则
- **SOLID 原则**:单一职责、开闭原则等
- **DRY 原则**:不重复自己
- **KISS 原则**:保持简单
- **YAGNI 原则**:你不会需要它
### 11.3 代码审查
- **Pull Request**:代码合并前必须审查
- **审查清单**:功能、性能、安全、可维护性
- **自动化检查**:静态代码分析工具
- **知识分享**:通过代码审查传播最佳实践
### 11.4 重构策略
- **持续重构**:小步快跑,持续改进
- **测试保护**:重构前确保测试覆盖
- **重构时机**:新功能开发时同步重构
- **技术债务**:定期评估和偿还技术债务

View File

@@ -0,0 +1,16 @@
---
description: 该规则解释了 SwiftUI 在 iOS、macOS、watchOS 和 tvOS 开发中的模式和最佳实践。
globs: **/*.swift
alwaysApply: false
---
# SwiftUI 规则
- 使用结构体struct创建视图并保持其小巧和专注
- 使用 @State 管理简单的视图本地状态
- 使用带有 @Published 的 @ObservableObject 管理共享状态
- 使用 @Binding 将可变状态传递给子视图
- 创建自定义 ViewModifiers 实现可复用的样式
- 使用环境对象environment objects进行依赖注入
- 对大型集合使用 LazyVStack 和 LazyHStack
- 将复杂的视图逻辑提取到单独的组件中

View File

@@ -0,0 +1,50 @@
---
description: 该规则解释了 Tailwind CSS 约定、实用工具类和现代 UI 开发的最佳实践。
globs: **/*.css
alwaysApply: false
---
# Tailwind CSS 规则
- 使用响应式前缀实现移动优先设计:
```html
<div class="w-full md:w-1/2 lg:w-1/3">
<!-- 移动设备上全宽,中等屏幕上占一半,大屏幕上占三分之一 -->
</div>
```
- 为交互元素使用状态变体:
```html
<button class="bg-blue-500 hover:bg-blue-600 focus:ring-2">
点击我
</button>
```
- 必要时使用 @apply 处理重复模式:
```css
@layer components {
.btn-primary {
@apply px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600;
}
}
```
- 对特定需求使用任意值:
```html
<div class="top-[117px] grid-cols-[1fr_2fr]">
<!-- 自定义定位和网格布局 -->
</div>
```
- 使用间距工具实现一致的布局:
```html
<div class="space-y-4">
<div>项目 1</div>
<div>项目 2</div>
</div>
```

View File

@@ -0,0 +1,87 @@
---
description: Vue.js 编码规则和最佳实践
globs: **/*.vue
alwaysApply: false
---
# Vue.js 规则
## 组件结构
- 使用组合式 API 而非选项式 API
- 保持组件小巧且专注
- 正确集成 TypeScript
- 实现适当的 props 验证
- 使用正确的 emit 声明
- 保持模板逻辑简洁
## 组合式 API
- 正确使用 ref 和 reactive
- 实现适当的生命周期钩子
- 使用 composables 实现可复用逻辑
- 保持 setup 函数整洁
- 正确使用计算属性
- 实现适当的侦听器
## 状态管理
- 使用 Pinia 进行状态管理
- 保持 stores 模块化
- 使用适当的状态组合
- 实现适当的 actions
- 正确使用 getters
- 适当处理异步状态
## 性能
- 正确使用组件懒加载
- 实现适当的缓存
- 正确使用计算属性
- 避免不必要的侦听器
- 正确使用 v-show 与 v-if
- 实现适当的 key 管理
## 路由
- 正确使用 Vue Router
- 实现适当的导航守卫
- 正确使用路由元字段
- 适当处理路由参数
- 实现适当的懒加载
- 使用适当的导航方法
## 表单
- 正确使用 v-model
- 实现适当的验证
- 适当处理表单提交
- 显示适当的加载状态
- 使用适当的错误处理
- 实现适当的表单重置
## TypeScript 集成
- 使用适当的组件类型定义
- 实现适当的 prop 类型
- 使用适当的 emit 声明
- 处理适当的类型推断
- 使用适当的 composable 类型
- 实现适当的 store 类型
## 测试
- 编写适当的单元测试
- 实现适当的组件测试
- 正确使用 Vue Test Utils
- 适当测试 composables
- 实现适当的模拟
- 测试异步操作
## 最佳实践
- 遵循 Vue 风格指南
- 使用适当的命名约定
- 保持组件组织有序
- 实现适当的错误处理
- 使用适当的事件处理
- 为复杂逻辑编写文档
## 构建和工具
- 使用 Vite 进行开发
- 配置适当的构建设置
- 正确使用环境变量
- 实现适当的代码分割
- 使用适当的资源处理
- 配置适当的优化