跳转至

附录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. 代码审查清单

功能性

  • 代码实现符合需求
  • 边界条件处理
  • 错误处理完善
  • 日志记录适当

可读性

  • 命名清晰有意义
  • 函数长度适中
  • 注释清晰必要
  • 代码格式规范

性能

  • 无内存泄漏
  • 无性能瓶颈
  • 资源及时释放
  • 异步处理得当

测试

  • 单元测试覆盖
  • 边界条件测试
  • 异常场景测试