查看: 181|回复: 0

[设计模式]记一次开源库的重构过程

[复制链接]
发表于 2016-10-17 01:18:24 |未经授权,严禁转载,违者必究... | |阅读模式
开源 重构 过程 模式 设计 开源重构研发模式 psv重构数据库 数据库重构 psv怎么重构数据库 psv如何重构数据库 数据库重构 pdf psv重构资料库 空间重构题库 psv怎样重构数据库
上周花了几天重写了我之前的IndexableStickyListView库,重组成RecyclerView版本:

937851-c2cd4fb11bedfafa.gif

937851-c2cd4fb11bedfafa.gif

联系人Demo
老版本的问题
1、利用者的实体类需要extends库的IndexEntity

public abstract class IndexEntity {
private String firstSpell;
private String spell;
...
}

  • 新版本:// 利用者实现IndexableEntity:
    public class CityEntity implements IndexableEntity {
    private String name;
    ?
    @Override
    public String getFieldIndexBy() {
         return name; // return 你需要按照该属性排序的field
    }
    ?
    @Override
    public void setFieldIndexBy(String indexByField) {
         this.name = indexByField; // 同上
    }
    }
    利用者传递给库的数据源只需要实现该IndexableEntity即可,库把它包装成EntityWrapper,内部数据的处置其实都是EntityWrapper。class EntityWrapper {
    private String index;
    private String pinyin;
    private T data;
    ...
    }
    尺度的Wrapper模式同样需要实现IndexableEntity,这里并没有实现是为了兼容HeaderView/FooterView的数据源环境,所以可以认为是Wrapper模式的变种
    原版本:
    新版本:
    ?经由过程HeaderAdapter,库内部颠末一些处置,可以使数据源映射到利用者期望的视图
    在Android的Adapter场景中,一般Adapter模式会搭配Obsever模式一路利用。因为Android中ListView/RecyclerView和Adapter是一个MVC的设计:
    // 注册不雅察者:
    public class IndexableLayout extends FrameLayout {
       private DataSetObserver mHeaderDataSetObserver = new DataSetObserver() {
           @Override
           public void onChanged() {
               if (mRealAdapter != null) {
                   mRealAdapter.notifyDataSetChanged();
               }
           }
       };
       public  void addHeaderAdapter(IndexableHeaderAdapter adapter) {
           adapter.registerDataSetObserver(mHeaderDataSetObserver);
           ...
       }
    }
    一旦数据源发生转变:
    1、挪用Adapter的notifyDataSetChanged();
    2、通知所有不雅察者数据发生转变:observable.notifyChanged();
    3、回调所有不雅察者的onChanged()。
    一个库的完成不是终点,而是一个起点
    在我们开辟的过程中,可能会推翻之前的一些设法,这时库的成长标的目的(包罗代码质量)可能就跑偏了,或者在早些开辟时的设计就并不完美
    所以在库完成后,一次重构就很有需要了;此次重构会让你考虑的更周全,一些设计模式的运用也就呵责之欲出
    小伙伴们,重构起来吧!在不断改进中前进~
    最后,贴上IndexableRecyclerView的项目地址: GitHub
  • 返回顶部快速回复上一主题下一主题返回列表

    声远论坛|联系电话:0537-2311005|Archiver|手机版|小黑屋|Sitemap|声远网 |网站地图|网站地图

    鲁公网安备 37089702000485号 | 鲁ICP备 18028751号 | 互联网药品信息服务资格证:(鲁)-经营性-2022-0209 | 增值电信业务经营许可证:鲁B2-20230761号 | (鲁)职介证字[223]:第08120014号

    中国互联网违法和不良信息举报中心 | 山东省互联网违法和不良信息举报中心 | 人工智能生成合成内容标识办法

    GMT+8, 2026-5-1 04:36, Processed in 0.084999 second(s), 31 queries , Gzip On, APCu On.

    Powered by Discuz! X3.5© 2001-2026 SYUAN.COM

    快速回复 返回顶部 返回列表