Wednesday, April 6, 2016

Android 代码规范 如何编写Clean Code?

如何写出简洁的代码呢?

下面是我的个人的一些总结的经验!

我替别喜欢代码规范,因为代码的规范,不仅仅是为了自己。作为开发者,都会有代码洁癖,不乱他多么的爱脏,但是,都喜欢写出干净的代码,这个是很难的!

如果,每个人都有自己的风格,每个人的写的代码都不一样的话,看别人的写的代码就跟吃屎一样。这年头,钱难挣,屎难吃。所以,为了自己,也为了别人,主要是为了自己以后维护开发方便。所以,我们都要遵循一种规范。

下面是我自己总结的代码的规范:

第一:  编码格式  UTF-8 
这是 编程 的常识。
多说一句,Windows 默认编码是GBK, 你要小心喽。嘿嘿,我吃过亏。当初,把系统的编码改了,貌似也不好使, windows 开发确实很蛋疼! 嘿嘿嘿。

第二: 命名
  好的命名的方式,不仅仅是为了自己开发快速,也是为了后面新加入的员工不骂娘。这件事情,说起来简单, 但是真的要是做起来,并没有那么容易。 因为,每个人的水平和意识不同。所以,导致了命名方式也是千差万别,有的人喜欢用汉语拼音,我他妈的也是醉了,这尼玛的是小学毕业的吗?我不是歧视非科班出身,但是,大部分,非科班出来的都是 不太愿意在命名上花时间的。 在命名上花点时间,是非常值得。这是一本万利的交易。
切忌,不要用中文,尽管Android studio 支持中文,但是编译起来肯定是要比英文慢的。   建议不要使用拼音,拼音感觉作为程序员,这种方式命名太Low 了!

就用英文,Google 翻译, 当然,同一个短语,翻译过来,可能有很多的word, 所以,这里你需要选一个,根据自己的喜好了。

命名的原则,
   在Android 里面需要注意的很多,

类名采用 大驼峰标记法
方法名,变量名  小驼峰标记法
常量名  全部大写,多个单词的时候可以添加下划线


1 Activity,Fragment,Adapter命名
大驼峰标记发
建议:
功能名称 + 描述 + Activity
例如:  
房屋列表  HouseListActivity
房屋详情  HouseDetailActivity

Fragment 也是同理。

2  xml 布局的命名
全部小写,多个单词之间使用下划线连接
建议:
activity_功能_描述_layout.xml
fragment_功能_描述_layout.xml
adapter_功能_描述_layout.xml
自定义的view
view_功能_描述_layout.xml

3 配置文件
  Android 有很强的配置文件
  如果,你不懂得配置文件的好处的话,你可以先跳过这部分。个人感觉配置文件,是很重要的,一种非常好的编码规范。
  
  代码里面,能用配置文件的就用配置文件中的引用!






第三:  编写原则
  设计模式是很重要的,如果,你写的代码遵循设计模式原则和方法,你的代码可维护性很好,代码也很简洁。

  代码简洁
  如何写出简洁的代码,每个人写代码都有自己的风格。

  遵循设计模式的原则
  
  写方法的时候,单一职责原则
   我很讨厌,一个方法里面写个几百行,看到这样的代码,你就要重构一下这块的代码。其实,重构分为两种,我们一直以为重构是架构的重构,其实,这只是一种重构的含义。另外一种,重构就是让你的代码变的更加的简洁,提高代码的可读性,可维护性,可扩展性,可重用性。就是,只是修改了一个类名和方法名,也是代码的重构,重构很简单,就是让你的代码变的更好。让我们一起来做这件事情,编写简洁的代码是一门艺术。
  写方法的时候,要执行单一职责的原则。
   
   例如:我们在Activity里面的onCreate() 方法里面,我们有的时候,可能会看到一个方法里面,写了好几百行。我觉的非常不好,可读性太差了,后期维护也是很麻烦的!记住,代码不仅仅是写给别人看的,更是写给自己看的,出现了问题,你就要回来查看自己的代码。我们在看自己几年前写的代码的时候,总觉的就像一坨屎一样的!
  我来说说onCreate()
   1 将布局文件提出来。
     因为,后面修改的时候,老是会去看我们的布局是不是出现了问题!所以,这个方法是非常的好的。
     在BaseActivity里面定义一个方法,
     protected int getLayoutId(){
         return 0;
     }
     这样子我们再用的时候:
     setContentView(getLayoutId());

   这个方法可以定义为abstract,  看你的需要,如果,你刚开始写的话,可以定义为抽象,但是,你要是修改已经写的差不多的产品,建议不要用抽象的。很费时间的!

   2  获取传递的参数
    protected void getIntentData(){}

   3  初始化view
    protected void initView(){}

   4  获取服务器的数据
   protected void getServerData(){}

因为,Activity 本身是有生命周期的,这些方法,你根据需要来安排!
    个人比较骄傲的一部分,就是,建议这些方法都写到父类里面例如:BaseActivity,  后面继承的时候,写起来很方便。这么写你就知道了。至于,抽象的话,你需要根据需要,有的可能不需要getIntentData, 所以,这个方法没有必要定义为Abastract.但是,有的你根据需要来吧! 具体问题具体分析。 当你,要修已经完成的项目的时候,这么做很需要时间的,所以,不见使用抽象。

   这些方法同样适用于Fragment.  至于Adapter  getLayoutId()  initView() 是适用的!
   建议将这些方法放到模板中。这也是设计模式的一种方法!




编写Java 的小建议

1 慎用  static
   因为,static 在JVM单独的开辟一块空间,静态代码区,这部分的内容。你如果是想当做静态的参数,就是不做改变的东西,是可以定义为静态的。如果,你的参数需要改变的时候,静态一旦开辟了,不会实时的改变。你写代码,就不会按照你预想的走!

  

第四:  配置文件的妙用

如何使用Colors.xml file

you can see this link:
http://geekhades.blogspot.com/2016/04/android-colorsxml.html








  




















No comments:

Post a Comment