배경
늦은 밤의 독백에서:
수십 또는 수백 개의 키 값을 정의하는 것이 일반적입니다. 더 쉬운 방법이 있습니까?
이것은 기하급수적으로 확장되고 일관성의 숨겨진 위험을 묻기 쉬운 프로젝트에서 통제되지 않는 몇 안 되는 장소 중 하나입니다.
새로운 값이 추가될 때마다 key, get, put, init, 5자리를 고려해야 합니다.
public class Configs {
...
private static int TEST_ID;
public final static String KEY_TEST_ID = "KEY_TEST_ID";
public static void setTestId(int id) {
TEST_ID = id;
SPUtils.getInstance().put(KEY_TEST_ID, id);
}
public static int getTestId() {
if (IS_XXXX()) return TEST_ID;
return UUID.ramdom().toString();
}
public static void initConfigs() {
TEST_ID = SPUtils.getInstance().getInt(KEY_TEST_ID, 0);
}
}
그 후 잇따라 개선 제안을 받았는데, 몇몇 친구들은 "속성 에이전트"를 언급하고 DylanCai 오픈 소스 라이브러리 MMKV-KTX 를 추천했습니다.
동시에 "속성 프록시"에서 영감을 받아 키, 값, get, put 및 init를 Java의 단일 디자인으로 줄이는 디자인을 생각해 냈습니다.
implementation 'com.kunminx.arch:key-value:1.2.0-beta'
3단계 노래 사용:
1. POJO를 읽고 쓰는 경우 직렬화 가능한 인터페이스를 구현해야 합니다.
public class User implements Serializable {
public String title;
public String content;
}
2. 평소와 같이 구성과 같은 프로젝트 구성 관리 클래스를 만듭니다.
//Configs 中不再定义一堆 KEY、VALUE 常量和 get、put、init 静态方法,
//只需一条条 KeyValue 静态变量:
public class Configs {
public final static KeyValueString accountId = new KeyValueString("accountId");
public final static KeyValueSerializable<User> user = new KeyValueSerializable<>("user");
}
3. 페이지 등에서 get( ) set( ) 메소드를 통해 KeyValue를 읽고 씁니다.
public class MainActivity extends AppCompatActivity {
...
//测试持久化写入
Configs.user.set(u);
//测试读取
Log.d("---title", Configs.user.get().title);
Log.d("---content", Configs.user.get().content);
}
KeyValueX는 기본적으로 SharedPreference를 사용하여 읽고 쓰고 KeyValueTool에 따라 MMKV 및 기타 구현을 삽입할 수도 있습니다(자세한 내용은 MainActivity 예제 참조).
현재 라이브러리는 오픈 소스이며 피드백을 환영합니다.