Корретно ли использовать паттерн декоратор в случае внедрения кеширования?
Мне интересно узнать мнение людей, правильно ли использовать паттерн Декоратор для внедрения кеширования? Представим ситуацию, что у меня есть такой контракт:
interface PersonService
{
// Здесь мы работаем с кешем
Task AddAsync(Person person, CancellationToken cancellationToken);
Task UpdateAsync(Person person, CancellationToken cancellationToken);
Task<Person> GetAsync(int id, CancellationToken cancellationToken);
Task<IEnumerable<Person>> GetAsync(CancellationToken cancellationToken);
// А здесь и в подобных не работает с кешем
Task<int> GetCountAsync(CancellationToken);
}
Как можно увидеть, то метод GetCountAsync никак не будет работать с кешем (для примера), и получается, что это лишний код. Допустим, если у нас интерфейс на 10+ методов, есть ли решение внедрить кеширование другим способом (не разделяя интерфейс, соответственно)?