Android项目重构之路:界面篇

    |     2016年2月23日   |   Android经验   |     0 条评论   |    1586

前一篇 《Android项目重构之路:架构篇》 把项目分成模型、接口、核心、界面四层。界面变化最频繁、也最容易乱。规划界面层,至少守住规范性、单一性、简洁性。


一、规范性

编码习惯各不相同:缩进有人 4 空格、有人 2 空格;变量有人 mValue、有人直接 value。不设规范,久了必乱。规范没有统一标准,下面几点仅供参考。

缩进

很多人习惯 Tab。不管规范是 4 空格还是 2 空格,统一设置好 Tab size,就不用每人去敲空格。

命名

好名字一眼能看出干什么、什么类型。有人把 TextView 缩成 tv、ListView 缩成 lv,不熟悉的人看不懂,不如 text、list 明确。id 命名结构可以是:控件_范围_功能,例如 edit_login_password。

单位

文字用 sp,其他元素用 dp,跟分辨率无关。SDK 里文字默认 sp,其他元素默认却是 px,也没提供 dp 接口,所以自己写 dp/px 转换很有必要。

最重要的不是规范怎么定义,而是严格执行。定义了却不遵守,等于没有。


二、单一性

面向对象有单一职责:一个类只有一个变化原因。这里的单一性还管方法、包,直到分层。单一是降耦合的关键。

界面的单一

布局和数据要分离。Android 已经用 layout 和 Activity 解耦:layout 排布局,Activity 展示数据。数据的获取和展示也要分离。很多团队把请求接口、拿数据、检查、更新 UI 全塞进 Activity/架构篇 读者也反映过这情况。加缓存要改界面,控件换数据也要改界面——已经有两个变化原因,违反单一职责。界面每个维度都要分开:布局、获取、检查、展示。

包和类的单一

定义包之前先想清职责。例如 com.keegan.activity 只放 Activity,com.keegan.adapter 只放适配器,com.keegan.util 是工具包。有人把 adapter 写在 Activity 里,因为“只用这一处”。做一段时间会发现无法复用,小需求调整要改很多地方。把 adapter 独立出来并抽基类之后,新增和修改都少很多。别让一个类做太多事。

方法的单一

一个方法封装一个行为;行为还能拆成更细的步骤。关键不在怎么定义这个行为,而在怎么拆。例如 onCreate 做初始化,可拆成:控件初始化、逻辑变量、数据加载和展示;加载和展示再拆:缓存、网络、展示。每个细化行为都独立成方法。

资源文件的单一

字符串进 strings.xml,数组进 arrays.xml,颜色进 colors.xml,尺寸进 dimens.xml。不要在代码或布局里直接写死。要国际化或改尺寸时,直接写死的地方会改不完。

保持单一性必定伴随重构。需求会变、代码会扩,扩着扩着就破坏单一,再重构回来。


三、简洁性

代码最怕臃肿:可读性差、维护麻烦、扩展更别提。判断标准很简单:直接读就能理解意图;意图不明显,说明还不够简洁。类、包、资源文件同样适用。

包的组织

按组件类型分包,不要按业务模块。业务会变,组件类型基本不变。新人可能不懂业务,但对组件清楚,入手快。

类和接口的命名

组件类加后缀:Activity、Fragment、Adapter;实体加 BO,工具加 util,实现加 Impl。接口层后缀 Api,核心层后缀 Action。

资源文件的分类

strings.xml 存所有字符串,分类放;某一类太多就拆文件,例如标题拆到 strings_title.xml:

  • 页面标题:title_{页面}
  • 按钮:btn_{按钮事件}
  • 标签:label_{标签文字}
  • 选项卡:tab_{选项卡文字}
  • Toast:toast_{消息}
  • 编辑框提示:hint_{提示信息}
  • 图片描述:desc_{图片文字}
  • 对话框:dialog_{文字}
原则 管什么 落地
规范性 缩进、命名、单位 定义了就必须执行
单一性 界面、包、类、方法、资源 扩展后重构回来
简洁性 代码、命名、组织结构 读代码就能懂意图

三条原则相辅相成:单一和简洁是规范的标准;严格执行规范,后两条才有效。具体实现下一篇再讲。

原文出处:Keegan小钢

一句话总结:界面层靠规范统一风格,靠单一拆开布局/数据/资源,靠简洁让人读代码就能懂;扩展破坏了这三条,就重构回来。

转载请注明来源:Android项目重构之路:界面篇
本文链接地址:https://ai.zhousir.top/?p=1323
回复 取消