Руководство по выполнению запросов из уровня пользовательского интерфейса - PullRequest
2 голосов
/ 15 июля 2011

Я пытаюсь установить соглашение о том, как выполнять запросы из нашего уровня пользовательского интерфейса (контроллеров).Вот мои три варианта:

  1. Обернуть каждый запрос в отдельный объект запроса.(кажется, приводит к взрыву класса, но лучше инкапсуляции).
  2. Обеспечить слой фасада службы для группировки связанных запросов.(нарушает SRP и разбрасывает кеширование. Декоратор кеширования делает более болезненным, когда не все методы запросов нуждаются в кешировании.)
  3. Предоставляет IDbReadContext, который оборачивает EF или что-то еще.(предоставляет IQueryable, который может или не может быть плохим. также не дает ни одной точки кэширования, так как несколько объектов могут выполнять одинаковые запросы.

Любые рекомендации или предложения были бы хорошими!

1 Ответ

1 голос
/ 15 июля 2011

Я склонен использовать класс для запроса, поскольку я нахожу несколько преимуществ для него.Каждый класс запросов лучше следует принципу единой ответственности, но также лучше следует принципу открытого-закрытого - легче вносить изменения в систему, добавляя новый код и не меняя существующий код, когда каждый запрос инкапсулирован в своем собственном классе.Кроме того, проще систематически применять межсекторальное поведение, такое как ведение журнала, авторизация и кэширование, используя аспектно-ориентированные методы, когда каждый запрос является собственным классом.

Иногда я создам один класс запросов с несколькими перегрузкамидля вызова запроса с разными наборами параметров, но я стараюсь делать это только тогда, когда результат логически одинаков, только извлекается из немного разных контекстов - количество повторного использования между перегрузками является хорошим показателем того, что

...