Вроде бы в интернете и так много контента по этой теме, но я до сих пор часто встречаю вопросы на тему сохранения прогресса. Обычно все хотят получить быстрое готовое решение для своих текущих проблем и не разбираться с их сутью. Многие материалы в сети это и дают – конкретные сухие простые решения, которые ломаются о будущий внезапно изменившийся…
А как же сохранение прогресса в .ini файле?)
Да хоть в `.жпг` 😁
Это всё относится к работе с файловой системой (пример с FileSystemDataStorage). Название или целый путь до файла — это ключ, по которому происходит запись.
Сформированный путь до файла может храниться как готовый ключ в KeysProvider (типа "Game/Save/Data.ini").
Но если помимо этого хранилища в проекте используются другие, то скорее всего ключ будет иметь укороченный формат (типа "Data"), и тогда для реализации с файловой системой потребуется ключ как-то декорировать, чтобы получить полный путь.
Декорировать нужно как: префиксом к ключу (корневая директория) и постфиксом (расширение файла).
Это можно сделать в самой FileSystemDataStorage (см. метод GetFilePath).
Или наделать декораторов для IKeysProvider (пример с KeysProviderPrefixDecorator).
Сложность итогового решения зависит от того, насколько гибкое и разнообразное поведение нужно иметь в проекте. Чем меньше гибкости требуется, тем меньше необходимость во всяких избыточных абстракциях, декораторах и сущностях.