KeyValueX: 상용구 코드를 제거하고 Android 프로젝트가 더 이상 KV 폭발을 일으키지 않도록 합니다.

배경

늦은 밤의 독백에서:

수십 또는 수백 개의 키 값을 정의하는 것이 일반적입니다. 더 쉬운 방법이 있습니까?

이것은 기하급수적으로 확장되고 일관성의 숨겨진 위험을 묻기 쉬운 프로젝트에서 통제되지 않는 몇 안 되는 장소 중 하나입니다.

새로운 값이 추가될 때마다 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 예제 참조).

현재 라이브러리는 오픈 소스이며 피드백을 환영합니다.

Github: KeyValueX

рекомендация

отjuejin.im/post/7121955840319291428
рекомендация