附录G 代码规范与最佳实践¶
Android开发代码规范与最佳实践指南
1. Kotlin代码规范¶
命名规范¶
Kotlin
// 类名:大驼峰
class UserRepository { }
// 函数名:小驼峰
fun getUserById(userId: String): User { }
// 常量:全大写下划线
const val MAX_RETRY_COUNT = 3
// 变量:小驼峰
var userName: String = ""
// 私有变量:下划线前缀
private val _userList = mutableListOf<User>()
代码格式¶
Kotlin
// 使用4空格缩进
// 每行不超过120字符
// 函数参数多时换行
fun longFunctionName(
param1: String,
param2: Int,
param3: Boolean
): ReturnType {
// 函数体
}
最佳实践¶
Kotlin
// ✅ 使用不可变变量
val user = User()
// ✅ 使用空安全
val name = user?.name ?: "Unknown"
// ✅ 使用扩展函数
fun String.addExclamation() = "$this!"
// ✅ 使用数据类
data class User(val id: String, val name: String)
// ❌ 避免使用!!
val length = text!!.length // 危险
2. Compose最佳实践¶
组件设计¶
Kotlin
// ✅ 使用@Composable
@Composable
fun UserCard(user: User, onClick: () -> Unit) {
Card(onClick = onClick) {
Text(user.name)
}
}
// ✅ 状态提升
@Composable
fun UserScreen(viewModel: UserViewModel = hiltViewModel()) {
val uiState by viewModel.uiState.collectAsState()
UserContent(uiState = uiState, onEvent = viewModel::onEvent)
}
@Composable
private fun UserContent(uiState: UserUiState, onEvent: (UserEvent) -> Unit) {
// UI实现
}
性能优化¶
Kotlin
// ✅ 使用remember缓存计算
val expensiveValue = remember(data) { expensiveOperation(data) }
// ✅ 使用key优化列表
LazyColumn {
items(items, key = { it.id }) { item ->
ItemRow(item)
}
}
// ✅ 避免不必要的重组
@Composable
fun StaticContent() {
Text("Static") // 无参数,不会重组
}
3. Flutter代码规范¶
命名规范¶
Dart
// 类名:大驼峰
class UserRepository { }
// 函数/变量:小驼峰
String userName = '';
void getUserById(String userId) { }
// 常量:小驼峰
const maxRetryCount = 3;
// 文件名:小写下划线
user_repository.dart
Widget设计¶
Dart
// ✅ 使用const构造函数
const MyWidget({Key? key}) : super(key: key);
// ✅ 状态提升
class ParentWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChildWidget(
onPressed: () => handlePress(),
);
}
}
// ✅ 拆分大Widget
class ComplexWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: [
Header(),
Body(),
Footer(),
],
);
}
}
4. 架构设计原则¶
SOLID原则¶
- Single Responsibility:单一职责
- Open/Closed:开闭原则
- Liskov Substitution:里氏替换
- Interface Segregation:接口隔离
- Dependency Inversion:依赖倒置
分层架构¶
Text Only
UI Layer (Presentation)
↓
Domain Layer (Business Logic)
↓
Data Layer (Repository)
↓
Platform Layer (Database/Network)
5. 代码审查清单¶
功能性¶
- 代码实现符合需求
- 边界条件处理
- 错误处理完善
- 日志记录适当
可读性¶
- 命名清晰有意义
- 函数长度适中
- 注释清晰必要
- 代码格式规范
性能¶
- 无内存泄漏
- 无性能瓶颈
- 资源及时释放
- 异步处理得当
测试¶
- 单元测试覆盖
- 边界条件测试
- 异常场景测试