ref[storage]: refactor the storage module

This commit is contained in:
godotg
2023-10-21 11:28:35 +08:00
parent 2499c4dc14
commit c466b5d1f2
6 changed files with 58 additions and 71 deletions
@@ -56,10 +56,6 @@ public class StorageContext implements ApplicationListener<ApplicationContextEve
return instance.storageManager.getStorage(clazz).get(id);
}
public static <V> List<V> getList(Class<V> clazz) {
return instance.storageManager.getStorage(clazz).getList();
}
public static <INDEX, V> List<V> getIndexes(Class<V> clazz, Func1<V, INDEX> func, INDEX index) {
return instance.storageManager.getStorage(clazz).getIndexes(func, index);
}
@@ -72,17 +72,6 @@ public class StorageInt<K, V> extends StorageObject<K, V> {
return get((int) id);
}
@Override
public int size() {
return dataMap.size();
}
@Override
public void recycleStorage() {
super.recycleStorage();
dataMap = null;
}
@Override
public Collection<V> getAll() {
return dataMap.values().stream().toList();
@@ -95,4 +84,15 @@ public class StorageInt<K, V> extends StorageObject<K, V> {
return map;
}
@Override
public int size() {
return dataMap.size();
}
@Override
public void recycleStorage() {
super.recycleStorage();
dataMap = null;
}
}
@@ -72,17 +72,6 @@ public class StorageLong<K, V> extends StorageObject<K, V> {
return result;
}
@Override
public int size() {
return dataMap.size();
}
@Override
public void recycleStorage() {
super.recycleStorage();
dataMap = null;
}
@Override
public Collection<V> getAll() {
return dataMap.values().stream().toList();
@@ -95,4 +84,15 @@ public class StorageLong<K, V> extends StorageObject<K, V> {
return map;
}
@Override
public int size() {
return dataMap.size();
}
@Override
public void recycleStorage() {
super.recycleStorage();
dataMap = null;
}
}
@@ -73,11 +73,11 @@ public class StorageObject<K, V> implements IStorage<K, V> {
}
public StorageObject(Class<?> clazz, IdDef idDef, Map<String, IndexDef> indexDefMap, List<?> values) {
this.dataMap = new HashMap<>(CollectionUtils.capacity(values.size()));
this.dataMap = new HashMap<>(CollectionUtils.capacity(values.size()));
this.clazz = clazz;
this.idDef = idDef;
this.indexDefMap = indexDefMap;
for (var value: values) {
for (var value : values) {
@SuppressWarnings("unchecked")
var id = (K) ReflectionUtils.getField(idDef.getField(), value);
@@ -150,47 +150,16 @@ public class StorageObject<K, V> implements IStorage<K, V> {
return get(key);
}
@Override
public void recycleStorage() {
recycle = true;
dataMap = null;
indexMap = null;
uniqueIndexMap = null;
idDef = null;
indexDefMap = null;
}
@Override
public boolean isRecycle() {
return recycle;
}
@Override
public void setRecycle(boolean recycle) {
this.recycle = recycle;
}
@Override
public Collection<V> getAll() {
return dataMap.values();
}
@Override
public List<V> getList() {
Collection<V> all = getAll();
return all.stream().toList();
}
@Override
public Map<K, V> getData() {
return Collections.unmodifiableMap(dataMap);
}
@Override
public IdDef getIdDef() {
return idDef;
}
@Override
public <INDEX> List<V> getIndexes(Func1<V, INDEX> func, INDEX index) {
String indexName = LambdaUtils.getFieldName(func);
@@ -213,6 +182,31 @@ public class StorageObject<K, V> implements IStorage<K, V> {
return value;
}
@Override
public void recycleStorage() {
recycle = true;
dataMap = null;
indexMap = null;
uniqueIndexMap = null;
idDef = null;
indexDefMap = null;
}
@Override
public boolean isRecycle() {
return recycle;
}
@Override
public void setRecycle(boolean recycle) {
this.recycle = recycle;
}
@Override
public IdDef getIdDef() {
return idDef;
}
@Override
public int size() {
return dataMap.size();
@@ -36,24 +36,23 @@ public interface IStorage<K, V> {
V get(long id);
void recycleStorage();
boolean isRecycle();
void setRecycle(boolean recycle);
Collection<V> getAll();
List<V> getList();
Map<K, V> getData();
IdDef getIdDef();
<INDEX> List<V> getIndexes(Func1<V, INDEX> func, INDEX index);
@Nullable
<INDEX> V getUniqueIndex(Func1<V, INDEX> func, INDEX uindex);
int size();
void recycleStorage();
boolean isRecycle();
void setRecycle(boolean recycle);
IdDef getIdDef();
}
@@ -51,8 +51,6 @@ public class ApplicationTest {
IStorage<Integer, StudentResource> storage1 = StorageContext.getStorageManager().getStorage(StudentResource.class);
//获取所有数据
List<StudentResource> list = StorageContext.getList(StudentResource.class);
//根据主键获取数据
StudentResource studentResource = StorageContext.get(StudentResource.class, 1001);
TeacherResource teacherResource = StorageContext.get(TeacherResource.class, 1001);