文档章节

关于开发规范

董家二少
 董家二少
发布于 2016/08/31 11:05
字数 1821
阅读 26
收藏 1

之前一直看到网上各种各样的开发规范,相对比之下也贴一下我们公司自己的开发规范,写的还是有一定道理可言的,约束越严格,相对应的后期开发也就越轻松,代码管理也越发简单

重要:github或者其他任何非公司仓库不允许上传与项目业务逻辑有关的代码实现
下班走之前提交代码到SVN,上班来之后第一件事更新SVN
SVN版本 1.7.9
svn 只允许上传正式代码,测试代码本机留存。
SVN 上的代码必须是完整可运行的. 提交代码到 SVN 之前的重要步骤:
   1. 本机运行 app并测试
   2. 检查 Local Changes 下面的 "Unversioned Files" 中时候含有未添加的文件
java版本[编辑]
不允许使用java8(即使用插件支持也不行), 只允许使用 java7 的部分语法(不允许使用 try-with-resources 特性)
使用类方法之前,请确保类方法存在(比如 String#isEmpty 方法在 java5 中就不存在),在提交代码之前,先在 2.3 模拟器中测试。
注释规范[编辑]
文件注释(必需)格式如下:
      /*
    * User:Dong Jiang
    * Introduction: 高德换乘路线详情地图
    */
基本原则[编辑]
*第一保证可读性*(不可读的代码立即重写),第二保证准确性,第三考虑效率
自己学习的时候造轮子,普通工作中就不用。然而,工作并不是你专心学习的时机,专心学习的时机都在晚上和假期。
任务完成之后,检查自己的代码,一切参照标准 1
在检查一个对象内容是否为空之前,先检查对象本身是不是null,通用对象应该使用工具方法检测。
可能返回null 的方法使用注解进行声明。
不要省略语句后面的括号 {}。包括循环语句与条件语句
不允许使用 System.exit(0) 来进行正常的退出操作。一定要使用前,拿出来讨论。
不允许存在魔数,任何具有逻辑意义的常量(数字,字符串等等),都应先声明后使用。
任何情况下(if, while,do等等),都不允许省略大括号。
减少布局层数以及布局复用:采用<merge> 优化布局层数;动态加载View, 采用 ViewStub 避免一些不经常的视图长期握住引用; 采用<include >来共享布局。
内存流,网络流,文件流,Cursor等资源及时关闭
避免创建不必要的对象
使用增强for循环时不能对集合本身进行操作,arraylist要手动循环(提前计算集合size),For循环里边不可以定义变量以及try-catch
合理利用浮点数,能用整形类型就不用浮点型
列表尽量使用recyclerview
try-catch不可以随便挥霍影响性能
不可以打印堆栈,调试下除外
如果不需要被继承,尽量指定类的final修饰符
尽量使用局部变量
不要随意的使用stingA=StringB+StringC的写法,有大量拼接操作的地方用StringBuilder 代替。
不要随便使用static变量,常量除外(static final)
费时的资源操作,使用Application的Context
调用方法时,参数深度层级不能多于2
代码format。
不必要的代码不要,包括以前逻辑的代码,测试代码,等,保持代码清洁。
在网络和文件(要在子线程去操作)操作等费时的地方,回调方法中在调用getview,content以及其他数据等activity相关资源的时候先调用isViewAttached
bitmap不用时,要及时回收,需要呈现到界面时用glide代替bitmap(网络和本地),不要用networkimageview,如果不是显示界面要及时recycle
TypedArray要及时recycle
没有用到的文件类方法不要留在项目中,保持代码清洁
e.printStackTrace();禁止有这种东西,有需要可以在lesslog里以开关的方式做
尽量避免硬编码 汉字放置到String中,其他建立字段
presenter尽量避免持有直接Activity的引用,能用回调或者新加方法的尽量新增
尽可能少的使用全局变量,例子:将类中使用一次的变量直接在使用处new出
if(){}else{........},禁止出现这种if里没有代码的情况
for循环前一定要判空
条件语句的条件部分不要产生副作用。
如果需要修改公用的部分,在群里说一声
switch-case语句在default里加入break
严禁 import static xxx.*;,唯一的例外是使用枚举。
时间单位统一使用毫秒
使用 PopupWindow 或者 Dialog 的时候,在 Activity 销毁之前,一定要关闭 PopupWindow 或者 Dialog
日志[编辑]
不要直接使用SDK内置的Log,使用项目统一包装的类或者工具
如果没有特殊要求,log的第一个参数始终应该是 this。静态方法中,第一个参数应该是类名。
不允许用自己的名字作为日志 tag
协作[编辑]
不是自己定义的接口不要修改
协商定义的接口不要修改
final类(不论是自己定义的还是别人定义的)不要修改要修改先协商
优先使用已存在的解决方案,不要重复造轮子。
定义样式的时候,遵照约定的规范格式,不要另起炉灶。
不要随意在公共库里面增加类或者修改方法,增加之前先明确是否已有现成的实现
多线程[编辑]
不要直接使用Thread,应该使用项目统一包装的类或者工具
在涉及多线程的地方,都要考虑内存泄露和数据安全的风险
异常处理[编辑]
控制消化或者抛出异常的时机,不能确定的时候拿出来一起讨论
解决bug的时候不能粗暴的捕获一切异常,必须要定位到具体的异常级别
错误示例[编辑]
随意的命名[编辑]
1. 改变了工程的前缀,随意取名
   <style name="CLL.Item.MainTitle">
       <item name="android:textColor">@color/core_textColorPrimary</item>
       <item name="android:textSize">@dimen/text_size_14</item>
   </style>
2. 干脆没有前缀
   <style name="DialogAnimation">
       <item name="android:windowEnterAnimation">@anim/cll_dialog_fullscreen_enter</item>
       <item name="android:windowExitAnimation">@anim/cll_dialog_fullscreen_exist</item>
   </style>
   <declare-styleable name="TagCloudView">
       <attr name="tcvBackground" format="reference"/>
       <attr name="tcvTextColor" format="color"/>
       <attr name="tcvBorder" format="dimension"/>
   </declare-styleable>

暴露细节[编辑]
StationDetailPresenterImpl:
   @Override
   public void parseIntent(Intent intent) {
       mRefer = KpiReferer.getRefer(intent);
       mPolicy = KpiPolicy.getPolicy(intent);
       if (mPolicy == null) {
           mPolicy = new Policy();
       }
       mStationEntity = intent.getParcelableExtra(LineConstant.IntentConstant.INTENT_EXTRA_STATION_ENTITY);
       getView().showStationName(mStationEntity.getStationName());
       DestStationEntity destStation = intent.getParcelableExtra(TransitConstant.INTENT_EXTRA_SCHEME_DEST);
       if (destStation != null) {
           loadStationsFilterByDestStation(destStation);
       } else {
           loadStationDetail();
       }
   }
过度封装[编辑]
1. 毫无意义的封装
   /**
    * 获取当前版本的启动次数
    */
   private static int getOpenCountInCurrentVersion(Context context) {
       return CllPreference.getInstance(context).getOpenCountInCurrentVersion();
   }
2. 混合基础功能 与 业务功能。业务功能应该使用对象,而不是 util
   //增加一条非默认地点
   private static void addNonDefaultDestEntity(final DestEntity destEntity, Poi poi, TransitParam normalParam, @DestType.Type int destType) {
       TransitParam transitParam = new TransitParam()
               .transitDest(poi.getGeoPoint())
               .destType(destType)
               .destName(poi.getName())
               .destTag(poi.getName());  //默认情况下,destTag和destName相同
       transitParam.getParams().copyFrom(normalParam.getParams());
       TransitClientFactory.getInstance().addDest(transitParam, new OptionalParam(), new DataListener<DestAddData>() {
           @Override
           public void onDataResponse(DestAddData data) {
               super.onDataResponse(data);
               destEntity.setDestId(data.getDestId());
           }
       });
   }

© 著作权归作者所有

上一篇: Android中ViewGroup
下一篇: Android代码优化
董家二少
粉丝 3
博文 34
码字总数 85000
作品 0
海淀
程序员
私信 提问
【Web规范】前端开发规范细则(更新中...)

参考列表: 教你怎样对word文档进行排版(表要笑话我,排版是基础中的基础,不然乱七八糟的文档让别人乍看哦) W3C标准 关于团队合作的css命名规范 Web前端开发规范文档 Web前端开发规范手册...

呢喃的猫咪
2014/02/18
0
0
PHP编码规范(PSR)的简述

PSR简介 PSR是一系列关于PHP开发的规范,一般大家遵守的是 php-fig定义的规范,中文翻译版本参考目前官方已制定的规范包括以下六份文件: PSR-0 (弃用) PSR-1 (基本代码规范) PSR-2 (代码风格...

2688
2016/07/04
335
0
Android:你不能忽略的代码命名规范

前言 Android代码规范内容非常多,但对我们最有用& 最有影响的莫过于 Android代码的命名规范 可是,有很多人容易忽略代码的命名规范,从而导致代码的可读性 & 维护性非常差,最终导致开发效率...

Carson_Ho
2018/08/08
0
0
JavaScript模块化编程和项目实施心得

一、模块化 同过JavaScript我们可以很方便去去引入js调用其中的方法,但由于JavaScript淡化了类的概念,我们会比较困难去按模块去调用既定已封装好的特定功能的方法。目前关于模块化的规范有...

漂泊者及其影子
2016/03/30
49
0
运维规章文档初稿

1.信息与数据安全整体策略 Skip to end of metadata Go to start of metadata 信息总体安全策略 关于敏感数据失效后处理原则与操作方法 关于数据安全管理员与数据安全策略执行规章制度 关于限...

Bruceweien
2017/06/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2019年普通高校在川招生专业及名额介绍文科 带学费

2019年普通高校在川招生专业及名额介绍文科 带学费

asdtiang
13分钟前
0
0
springCloud配置中心config配置svn(踩坑记录)(基于consul)

新建一个config Server模块; 引入如下依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId></dependency>......

为何不可1995
13分钟前
0
0
mysql相关tips(持续更新)

1.字符集:utf8mb4 mysql 5.5.3之后出来的字符集,占用1-4个字节,最大占用的字节数为4.目前这个字段主要应用在(Emoji表情)。utf8mb4兼容utf8(1-3个字节),且比utf8能表示更多的字符。什...

lara_
14分钟前
0
0
微服务开源生态报告 No.1

从关注开源,到使用开源,再到参与开源贡献,越来越多的国内开发者通过开源技术来构建业务。 截止目前,Arthas / Dubbo / ChaosBalde / Nacos / RocketMQ / Seata / Sentinel / Spring Clou...

阿里云官方博客
17分钟前
1
0
MaxCompute 费用暴涨之存储压缩率降低导致SQL输入量变大

现象:同样的SQL,每天处理的数据行数差不多,但是费用突然暴涨甚至会翻数倍。 分析: 我们先明确MaxCompute SQL后付费的计费公式:一条SQL执行的费用=扫描输入量 ️ SQL复杂度 ️ 0.3(¥/GB...

zhaowei121
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部