Давайте предположим, что у меня есть класс, который определяет объект изображения. Изображение может принадлежать альбому, а альбом может принадлежать папке. Эти данные хранятся в MySQL. Данные также кэшируются. В кеше он хранится в денормализованной форме, то есть папки отслеживают изображения, с которыми они связаны, и альбомы тоже. Это сделано из соображений производительности.
Всякий раз, когда фотография создается сейчас, она добавляется как в папку, так и в альбом в кеше. Поскольку код для добавления фотографий в кеш одинаков, и меняются только ключи кеша, создается отдельный объект с именем CachedImageSet. Папка и альбом создают экземпляр CachedImageSet со своим уникальным идентификатором и типом коллекции, и они вызывают CachedImageSet для добавления и удаления изображений и для получения списка изображений в наборе.
Я не хочу, чтобы клиентский код напрямую взаимодействовал с CachedImageSet, поэтому у меня есть методы в классах папок и альбомов, которые являются обертками для методов CachedImageSet. Это приводит к большому дублированию кода. Есть ли шаблон дизайна, который помог бы мне избавиться от этого дублирования? Я использую PHP, MySQL и Redis (для кеш-слоя).