I will give a couple of examples of the implementation of the repository with the cache:
Example 1:
// две обязанности, получить данные и кэшировать class Repository { private final Cache cache; private final Api api; ........ Data getData(int arg) { if (cache.containsData(arg)) return cache.getData(data); Data data = api.getData(); cache.putData(data, arg); return data; } } Example 2:
// одна обязанность, получить данные class Repository { private final Api api; .............. Data getData(int arg) { return api.getData(); } } // одна обязанность кэшировать данные // или две? получить с другого репозитория и кэшировать class CachedRepository { private final Cache cache; private final Repository next; ........ Data getData(int arg) { if (cache.containsData(arg)) return cache.getData(data); Data data = next.getData(arg); cache.putData(data, arg); return data; } } Help deal with porridge in my head.