Добавить кеширующий слой.
Либо вы реализуете кэширование в каждой отдельной реализации уровня данных, либо вы можете сэкономить много работы и просто внедрить кэширование в отдельном слое над уровнем данных, так что вам придется сделать это только один раз. Это дает дополнительное преимущество, заключающееся в том, что вы будете кэшировать свои объекты передачи данных, в то время как если вы поместите кэширование в th DL, вы, возможно, допустили ошибку кэширования необработанных данных, что означает, что вы будете переводить их в DTO каждый раз, когда вы будете работать кеш.
Важная цель состоит в том, чтобы уровень кэширования был точно таким же интерфейсом, что и обычный уровень данных без кэширования. Если вы можете сделать это, то кэширование становится необязательным - кеш выглядит просто как любая другая реализация DL - и верхние уровни не знают об этом. Это может быть сложно, но выигрыш хороший.
Итак:
[различные реализации DL] - [интерфейс DL] - [уровень кэширования] - [интерфейс DL] - [верхние уровни]