我的规范小结

一 概述

项目结构和代码规范决定了项目的质量,为了后面更好的扩展和封装,代码规范化是必不可少的

二 MVP 最小可实现目标

将项目分为了四个层级:模型层、接口层、核心层、界面层。模型层定义了所有的模型;接口层封装了服务器提供的API;核心层处理所有业务逻辑;界面层就处理界面的展示。几个层级之间的关系如下图所示:

MVP

在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最好在代码上进行注释,如下图:
    这里写图片描述

四、理想

  1. 需要知道写的方法在哪个线程执行,最好做到数据在异常线程,View的显示在主线程去做(MVC)
  2. 程序=数据+算法,数据驱动算法,如果数据错误,则相对应的View要做异常处理


—- 未完待续,请网友如果有更好的规范,在底下评论帮我指出,一起完善,谢谢


朋友们也可以加入群一起讨论学习(群号:499537304)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值