我的规范小结
2016-02-16 11:45
330 查看
一 概述
项目结构和代码规范决定了项目的质量,为了后面更好的扩展和封装,代码规范化是必不可少的
二 MVP 最小可实现目标
将项目分为了四个层级:模型层、接口层、核心层、界面层。模型层定义了所有的模型;接口层封装了服务器提供的API;核心层处理所有业务逻辑;界面层就处理界面的展示。几个层级之间的关系如下图所示:
在As里面的包的表现形式就是 Model Api Core View,如下图示:
如上图片来自:http://keeganlee.me/post/android/20150605 这位大神
三 代码书写规范
可以参考底层代码书写规范:
成员变量前面加m,希望子类重写用protect修饰,希望外部引用用public,不希望外部类调用用private局部变量和方法用小写(驼峰式命名),类用大写(驼峰式命名)
常量全部大写
class ViewGroup{ protected ArrayList<View> mDisappearingChildrens; TouchTarget target = mFirstTouchTarget; public boolean getClipChildren() { return ((mGroupFlags & FLAG_CLIP_CHILDREN) != 0); } }
TAG 统一用 常量修饰,标志位最好可以用二进制(用过&和| 代替 == ), 计算机最后都要转化为二进制计算
这样的性能比较好
private static final String TAG = "ViewGroup"; private static final int FLAG_CLIP_CHILDREN = 0x1; static final int FLAG_CLIP_CHILDREN2 = FLAG_CLIP_CHILDREN << 1; public boolean getClipChildren() { return ((mGroupFlags & FLAG_CLIP_CHILDREN) != 0); }
TAG 统一用 常量修饰,标志位最好可以用二进制(用过&和| 代替 == ), 计算机最后都要转化为二进制计算
这样的性能比较好
private static final String TAG = "ViewGroup"; private static final int FLAG_CLIP_CHILDREN = 0x1; static final int FLAG_CLIP_CHILDREN2 = FLAG_CLIP_CHILDREN << 1; public boolean getClipChildren() { return ((mGroupFlags & FLAG_CLIP_CHILDREN) != 0); }
用于回调的接口最好写在回调的类里面去,参考View的setOnclickListener的写法
class View{ public OnClickListener mOnClickListener; public interface OnClickListener { /** * Called when a view has been clicked. * * @param v The view that was clicked. */ void onClick(View v); } public void setOnClickListener(OnClickListener l) { if (!isClickable()) { setClickable(true); } getListenerInfo().mOnClickListener = l; } }
常量类类似R文件的写法
public final class R { public static final class anim { public static final int abc_fade_in = 0x7f040000; public static final int abc_fade_out = 0x7f040001; } public static final class attr{ public static final int actionBarDivider= 0x7f040000; } }
JavaDoc注解,个人觉得除了返回的参数和结果会注解外,还要知道这个方法在哪个线程运行
注解去规避一些空指针问题,比如如下方法,IDE会用警告的方式提醒你返回的参数不能为空
@NoNull public View getCurrentFocus() { return mWindow != null ? mWindow.getCurrentFocus() : null; }
bug最好在代码上进行注释,如下图:
四、理想
需要知道写的方法在哪个线程执行,最好做到数据在异常线程,View的显示在主线程去做(MVC)程序=数据+算法,数据驱动算法,如果数据错误,则相对应的View要做异常处理
—- 未完待续,请网友如果有更好的规范,在底下评论帮我指出,一起完善,谢谢
朋友们也可以加入群一起讨论学习(群号:499537304)
相关文章推荐
- 6.以表格单据式单表为模板定制模块:订单信息维护
- 轻松理解闭包
- ssh学习:hibernate关系映射(1)
- ssh学习:hibernate关系映射(2)
- ssh学习:hibernate关系映射(3)
- ssh学习:hibernate关系映射(4)
- ssh学习:hibernate关系映射(5)
- ssh学习:hibernate中QBC查询
- ssh学习:hibernate中Native SQL查询
- 自定义泛型类获取子类的实体类类型
- ssh学习:hibernate中组件属性
- ssh学习:Spring注入方式
- ssh学习:Spring中Bean的生命周期
- 分布式版本控制工具 Git
- magento < 1.9 xss 漏洞修复说明
- 装饰模式
- Ubuntu 14.04进不了登录界面的修复
- 从2月14号开始,上传AppStore会碰到:Failed to locate or generate matching signing assets
- ssh学习:struts2的获取web资源模式
- ssh学习:struts2的拦截器实现