Android平台开发中的重构三步走

转载 2012年03月21日 13:47:21

我们都知道,技术是优质产品的必要条件,要满足用户不断变化的需求,必须有弹性的技术实现框架;android开发平台正是提供给开发者一个清晰且有弹性的架构,正如我们在eclipse开发环境中心建一个android开发项目时,生成的不同文件夹,如src是存放源代码的目录,res是存放资源的目录,这就是为了单纯化界面修改模式,将界面描述部分的程序代码,抽取到程序外部的xml说明文件中。简而言之,即java+xml结构。

    这样做不仅增加了程序的可读性,更重要的是实现了界面与逻辑程序的脱离,便于我们修改与维护,当然,为了延续甚至程序这方面的性能,我们应该做好程序的重构,重构代码即在反复的检查或者读代码的过程中,通过一些小的改变来增加代码的可读性和可维护性,罗马不是一天建成的,代码不是写一次就可以做到优化的,所以做好量变的过程,即每天做好代码的重构,才能使代码出现质变,形成可读性的和可维护高的优化的代码,个人看来,重构有时是举手之劳,有时却包含着更加深奥的架构设计模式,有时是我们程序的扩展,有时却是简化,但无论我们做什么,总之,程序会更加完美。

第一步:举手之劳的重构,简单却必——将字符串抽离到xml

    相信开发者都会有这样的经验,在编写程序的时候,我们会先处理xml的部分,然后编写并调试java部分代码,在调试过程中,我们也许会声明一些用于界面显示的string变量,而在程序可以按我们的要求跑起来的时候,我们常会忘了string本来应该被抽取到res/values目录下的strings.xml文件中,但我们恰恰忘了,于是用于显示的这个string就被“临时”的“永久”保存在我们的逻辑程序中,这显然违背了android架构,所以,举手之劳的重构,将字符串抽离到xml中,简单却必要。其必要性也会在本文的后文中有所体现。

第二步:使用架构设计模式的重构——android平台中应用的MVC模式

    我们在android平台开发中也用到一些常用的架构设计模式,尤其是MVC模式,MVC模式指的是将程序组成分成三个主要部分,分别是存储内容的“model(模型)”,负责显示的“view(视图)”,控制程序逻辑操作的“Controller(控制器)”,我们进行开发时应该将这三个部分分割开来,来增加我们程序代码的可读性,进而便于维护。“controller”部分负责处理各种主要的运算工作,例如根据用户在“view”中的各种操作,从“model”中提取数据,从而把其中的视觉元素传给“view”,将数据的修改部分修改在“model”中。

   Android平台中的java+xml模式实际上已经很像是MVC模式,然而,我们在编写java代码中,也要延续这种风格,甚至将它发扬光大,可以想象,在同一个界面中多添加一些按钮和字段后“onCreate”这个函数会像长篇小说一样让人不忍多看一眼,我们不妨将其中的一部分抽离出来,不如就使用MVC模式对部分代码进行封装,我们将“声明和查找组件”部分抽离出来,封装成findViews函数,声明和查找组件部分就是像这样的代码:updateButton =(button)findViewById(R.id.update)//按id在界面中寻找updateButton这个组件,另一部分就是“为特定界面组件添加控制流程”,如给按钮增加Listener这种事件函数等。

第三步:增加软件功能——国际化和其他

     Java中有一些支持国际化的特性,包括统一的编码,地区类Locale,并且利用类ResourceBundle将地区特征的信息从程序中分离出来,在android的开发框架中也给我们提供了的支持多国语言的办法,正如我们第一步中做的,我们将负责显示字符串抽离到string.xml中,然后我们可以创建同样的string.xml只是把原来的显示语言换成其他我们需要的,如中文换成英语,然后将中文(简体)的string.xml的目录换成res/values-zh-rCN,将英文的string.xml的目录换成res/values-en,这样重新运行就可以支持多国语言我们只需在java程序中的onCreate程序块中添加如下代码便可实现:

首先使用Resources res =getResources();获得资源对象,接着使用Configuration conf = res.getConfiguration();取得设置对象,然后使用conf.locale = Locale.SIMPLIFIED_CHINESE;将我们的语言,最后将我们的配置显示出来DisplayMetrics dm = res.getDisplayMetrics();Res.updateConfiguration(conf,dm);

当然我们也可以做成选项,然用户自己来选择。

最后,增加软件功能的努力也不仅只有国际化,还有让程序能适应不同的屏幕方向,显示方式和浏览方式等等。也有对我们的程序做减法,去掉冗余的部分。总之,考虑用户的使用,让用户获得更好的体验是我们的目标。

我只是简单介绍了一下我在android开发中使用的一些重构技巧,当然重构的方向远不止如此,还有统一的命名方法等方法,这里就不再赘述。正如开篇时提到的,android开发平台给我们提供了非常清晰的架构,我们在开发中要利用好它使我们的代码更好读,程序更好用,这才是作为一个开发者最需要做的,每天做一下小的改进,日久天长,我们的程序就会朝这个目标迈进,希望所有开发者都能有更好的应用。

《Android平台开发之旅》学习笔记

第三章:Android应用程序组件 3.2 Android应用程序组件 Activity 活动--形象大使 Service 服务--老黄牛 BroadcastReceiver 广播接收器 --倾听者 ...
  • cbk861110
  • cbk861110
  • 2012年08月21日 09:52
  • 926

在C++中的进行重构

在C++中的进行重构   最近在修改一个项目,C++的一个服务器端的程序。它用来连接两种终端一种是发起终端一种是被控终端。以前只支持一个发起终端,现在需要将其改成能够支持多个发起终端的情况,当看了程序...
  • HotWu
  • HotWu
  • 2005年07月27日 02:19
  • 2452

什么叫重构?

重构是一个模糊的概念,指代的是对程序做较大程度的改变。无关软件质量。...
  • wwwsq
  • wwwsq
  • 2014年04月16日 11:09
  • 19071

改写equals与hashCode的简单方法

Apache Commons Lang库中的EqualsBuilder与HashCodeBuilder类可以简化Java类中equals与hashCode方法的改写过程。 关于如何改变 Java类中...
  • houpengfei111
  • houpengfei111
  • 2012年11月16日 18:23
  • 1388

Eclipse中重构功能的使用

Eclipse 中的重构功能使其成为了一个现代的 Java 集成开发环境 (IDE),而不再是一个普通的文本编辑器。使用重构,您可以轻松更改您的代码,而不必担心对别处造成破坏。有了重构,您可以只关注于...
  • u011494050
  • u011494050
  • 2014年12月09日 15:18
  • 1506

deep learning PCA(主成分分析)、主份重构、特征降维

前言       前面
  • hlx371240
  • hlx371240
  • 2014年10月25日 22:58
  • 5393

IDEA 重构快捷键

前言        一次性的将IDEA的全部功能都贴出来似乎不好,遂分批整理!此次就来讲一下IDEA的重构快捷键。快捷键重命名文件、方法、属性等(rename):SHIFT+F6 提取当前选择为变量...
  • wangmeng951011
  • wangmeng951011
  • 2017年03月15日 13:22
  • 1553

Eclipse 中的重构功能

Eclipse 中的重构功能使其成为了一个现代的 Java 集成开发环境 (IDE),而不再是一个普通的文本编辑器。使用重构,您可以轻松更改您的代码,而不必担心对别处造成破坏。有了重构,您可以只关注于...
  • jiafu1115
  • jiafu1115
  • 2011年08月19日 13:49
  • 10149

设计模式与重构是一种追求

1         设计模式与重构是一种追求 当一个软件工程师(DEV)一开始编码的时候,因为技术的缺乏,追求的必当是完成任务(Coding)。 随着时间的发展,DEV已经能够完成任务之后。也便开始追...
  • sunyaqing2008
  • sunyaqing2008
  • 2016年04月05日 12:06
  • 565

Maven的本地初始配置三步走

Maven下载地址:http://maven.apache.org/download.cgi  本文编写时最新版本为3.2.3,在页面选择Maven 3.2.3 (Binary zip)下载即可。 ...
  • PrinceTerence
  • PrinceTerence
  • 2014年09月02日 15:14
  • 4408
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android平台开发中的重构三步走
举报原因:
原因补充:

(最多只允许输入30个字)