移动开发代码规范:从混乱到清晰的实战经验

最近帮朋友公司看一个移动端项目,刚打开代码库就有点懵。同一个功能在不同页面写法完全不一样,变量命名像谜语,注释几乎没有。最离谱的是,登录逻辑在三个地方重复出现,改一处就得手动同步另外两处。这种状况其实在小团队里太常见了——前期图快,后期遭罪。

命名不是小事

别小看变量和方法怎么叫。看到 getData() 这种名字就头疼,到底拿的是用户数据还是订单?换成 fetchUserProfile() 或者 loadRecentOrders(),谁看了都明白。类名也一样,别用 ManagerHelper 这种万金油后缀,具体点,比如 ImageCacheDataManager 强多了。

结构统一才好维护

团队里有人喜欢把网络请求写在 Activity 里,有人抽成单独的服务类。时间一长,新人根本不知道该往哪加接口。定个规矩:所有 API 调用必须放在 api/ 目录下,按模块分文件。比如用户相关都走 UserApi.javaUserService.kt

class UserApi {
    fun login(username: String, password: String): Call<LoginResponse>
    fun getUserProfile(): Call<UserProfile>
}

空指针是能防的

Kotlin 的可空类型用起来其实挺顺手。别嫌 String? 多了个问号麻烦,它能逼你在编译期就把空值处理好。Java 项目至少加上 @Nullable@NonNull 注解,配合 Lint 检查,能拦住一半线上崩溃。

日志别瞎打

见过满屏都是 Log.d("TAG", "进入方法") 的项目,真出了问题反而找不到重点。统一用个封装过的 Log 工具类,加个开关控制输出级别,上线自动关闭调试日志。关键节点才打印,比如网络请求失败、数据解析异常。

object AppLogger {
    private const val IS_DEBUG = BuildConfig.DEBUG
    
    fun d(tag: String, message: String) {
        if (IS_DEBUG) {
            Log.d(tag, message)
        }
    }
}

资源文件也得管

图片命名别用 img_01.pngicon_new.png 这种。改成 ic_user_avatar.pngbtn_submit_pressed.9.png,一眼就知道用途。字符串资源同理,login_hint_emailhint_1 明确多了。

自动化检查省力气

靠人盯不如让工具上。配置个简单的 Checkstyle 或 Detekt 规则,提交代码前自动跑一遍。比如强制两空格缩进、禁止超过 80 字符的行、检测未使用的导入。CI 流水线卡住几次,大家自然就习惯了。