Service for Data Management (Save System)
Roadmap:
-
test in project
-
cleans code(and maybe example)
-
сделать реализации быть более абстрактными:
- отказаться от жесткой привязки к типам данных
- например JsonStorage - изменить на FileStorage, принимающий сериализатор
- таким образом Тип самого хранилища - файловое, все остальное не важно.
- так же это отделит привязку к конкретным сериализаторам.
-
можно сделать DataService более универсальным:
- сейчас обязательны реализации трех хранилищ - кэш, файловое, удаленное - но любое можно заменить пустышкой.
- добавление хранилищ списком
- тогда нужно будет добавить приоритет/порядок для загрузки и сохранений в конкретные хранилища
- Синхронизацию тоже придется изменять для поддержки списка хранилищ
Requirements:
- UniTask: https://github.com/Cysharp/UniTask.git
- add with unity package manager, by git: https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask
- Newtonsoft json: https://github.com/applejag/Newtonsoft.Json-for-Unity.git
- add with unity package manager, by name:
com.unity.nuget.newtonsoft-json
- add with unity package manager, by name:
Features:
- Flexibility:
- anymore data types(any serializable) - but need inherit from DataEntity!
- custom realisations for Storages (LocalStorage > JsonStorage(simple files) | SecureJsonStorage | SQLstorage(use BD and etc))
- Auto Synchronization(works with queues)
- Forced Save(force save all data in queues)
- Load priority - Cache > Local > Remote
- Auto cached data - load data from server > auto saved in cache and local. TODO может сделать настройки у типов данных? кешируемый/сохраняемый локально/удаленно и тд
- Key Naming support:
- func KeyFor(anyStringParams[]) -> return string key ~ typedata_param1_param2_etc
- use in LoadAll(KeyFor()) -> return all data with prefix - "typedata".
- use in Save for good standart naming
- Check results operations(with class Result)
- IsSuccefull
- ErrorMessage
- get Data
- Ability for added:
- check versions(there is base logic)
- check time updates
- data validations
Features in example:
- remote storage use empty realization
- there is a load all data with type - usages LoadAll(KeyFor())
- UI for show loaded data
- class DataMonitorUI shows all data in Storages