Мои модели горячего уровня выглядят примерно так, как показано ниже, и хранятся как один объект за строку:
Код: Выделить всё
// Hot Tier Model #1
class Index {
String key;
Object indexData;
}
// Hot Tier Model #2
class Record {
String key;
Object data;
}
Код: Выделить всё
// Cold Tier Model
class ColdTierRecord {
Index indexRecord;
List records;
}
Сначала я определил API для библиотеки следующим образом:
Сначала я определил API для библиотеки следующим образом:
p>
Код: Выделить всё
// Library API
public T get(String keyPrefix, String keySuffix) {
// hot-tier records type is determined using type inference
return databaseAdapter.get(keyPrefix, keySuffix); // Adapter deserializes to type T
}
// Client Code
Index index = get(indexKey, indexKeySuffix);
// or
Record record = get(recordKey, recordKeySuffix);
Я подумал о том, чтобы клиент внедрил некоторые адаптер для преобразования из ColdTierRecord в Index и Record, но это усложняет обновление ColdTierRecord, поскольку нам нужно перезаписать весь объект.
Я рассмотрел следующее:
Код: Выделить всё
class GetResponse {
String className; // ColdTierRecord.class
Object data;
}
// Library API
public GetResponse get(String keyPrefix, String keySuffix) {
T data = databaseAdapter.get(keyPrefix, keySuffix);
return GetResponse.builder()
.className(data.getClass().getName())
.data(data)
.build();
}
// Client Code
GetResponse response = get(key, keySuffix);
// Switch based off of className and cast appropriately
// ...
Подробнее здесь: https://stackoverflow.com/questions/787 ... ava-method