чате. перед ее началом, ее нужно настроить. сам объект настроек хранится в абстрактном хранилище (будто память приложения, редис или любая другая субд) и в приложении имеется такой абстрактный класс для реализации адаптеров:
class BaseStorage(ABC):
@abstractmethod
async def create(self):
...
@abstractmethod
async def get(self):
...
конкретно сейчас я использую редис, и на этот объект с настройками я устанавливаю TTL (чтобы если про настройки забыли/передумали играть, то она не занимала лишнее место в памяти). проблема в том, что на следующем этапе, наборе игроков в игру, мне нужно обновить значение TTL, чтобы объект настроек не удалился из редиса раньше времени, потому что после набора игроков и начала игры он мне снова пригодится. но если я сделаю какой то метод для обновления этого TTL, то я буду зависеть от конкретной субд - редис. как тогда стоит поступить?
Сделать абстрактный класс с методом для обновления (считай протокол) и использовать одну из его реализаций Условно class BaseStorage: ... class RedisStorage(BaseStorage): ...
тогда в коде с логикой игры я буду зависеть конкретно от RedisStorage, не?
Почему? Ты будешь в функцию передавать любой инстанс BaseStorage и использовать его методы
а, ты имеешь ввиду добавить метод обновления в BaseStorage именно. а это не будет нарушение абстракции? мне казалось, что хранилище не должно знать ни о каких ттл
Скорее наоборот. "Не занимала память" это именно дело хранилища, в логике это не нужно
Обсуждают сегодня