У меня был спор с моим коллегой о том, относится ли определенная логика к уровню доступа к данным или к уровню бизнес-логики.
Сценарий таков, что BLL нужны некоторые данные для работы. Эти данные в основном хранятся в базе данных. Мы хотим кэшировать эти данные (используя System.Runtime.Caching), чтобы они были быстро доступны при последующих запросах. Архитектура такова, что DAL и BLL живут на одной коробке и в разных сборках (проекты в одном решении). Так что не стоит беспокоиться о том, что DAL может попасть по проводу или что-то в этом роде.
Мой аргумент заключается в том, что решение об использовании кеша вместо базы данных является заботой DAL. Уровень бизнес-логики не должен заботиться о том, откуда берутся данные, а только о том, что он получает нужные ему данные.
Его аргумент заключается в том, что уровень доступа к данным должен быть «чистым» и «глупым», и любая логика для принятия решения о том, чтобы поразить кэш, а не базу данных, должна быть на уровне бизнес-логики.
На мой взгляд, то, что он говорит, подрывает разделение интересов и заставляет слои быть более тесно связанными, когда цель состоит в том, чтобы сохранить слабо связанные вещи. Я вижу, где BLL мог бы захотеть контролировать это, если бы это была конкретная функция программы/интерфейса, чтобы решить, куда идти за данными, но здесь это просто не тот случай. Это очень простой сценарий кэширования, в котором база данных является основным хранилищем данных.
Мысли?