Piasy · 更新于 2018-11-28 11:00:42

《App研发录》一书

第1章:重构

  • BaseActivity要有两个,一个是业务无关的,位于base module中,另一个是业务相关的,位于app module中,后者封装了业务相关的公用逻辑和代码;同理,当fragment, dialog fragment有业务相关的共性时,也就是时候为app module准备一个base类了;
  • package by feature,被外部引用的类,就不要作为内部类了;未被包外引用的类,就要声明为package private;
  • (如果)activity只用于管理fragment,fragment inflate view,绑定view的生命周期需要拆分开来,避免onViewCreated过于复杂;
  • 绑定view和初始化变量、调用获取数据的方法要拆分开来,单一职责!
    • 具体而言,应该有getLayoutRes, initFields, bindView, startBusiness, unbindView这5个方法
    • getLayoutRes:返回layout的id,用于onCreateView;
    • initFields, bindView, startBusiness:初始化成员变量、绑定view(包括设置listener)、开始执行业务逻辑,被onViewCreated依次调用;
    • unbindView:解绑view(包括重置listener);
  • 为view设置listener,不要设置为this,而是创建新的;listener对象的创建开销并不是瓶颈,而代码整洁度的提升效果是很明显的;
  • fragment间数据传递:FragmentArgs;Effective Java item 74:尽量不要使用serialisable接口;
  • Adapter模板:建议使用AdapterDelegates,Favor composition over inheritance;而对于具体的一个AdapterDelegate,主要规范点在于onBindViewHolder,子view的listener如何设置,事件如何传递到fragment中?
    • 我的做法是,ViewHolder在构造函数中设置listener,同时它构造时接受一个接口,这个接口从fragment => adapter => ViewHolder => listener,如此达到事件传回fragment的目的;
  • 实体化编程/immutable/parcelable,推荐使用Auto-parcel + Gson
上一篇: AOP 下一篇: 函数调用时,传递...