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