Предположим, у меня есть класс Person, который имеет много приемов пищи.
В классе сущности Person есть свойство LastMealDateTime, которое возвращает дату последнего приема пищи, которую человек ел, с помощью запроса Linq. Это прекрасно работает на уровне бизнес-уровня, и это именно то, что мне нужно.
Скажем, я хочу перечислить все записи Person с указанием последнего приема пищи (возможно, экспорт в файл или сетку...).
Я мог бы загрузить все записи Person и получить свойство LastMealDateTime, но в результате получится N.. . обращается к базе данных, и если есть тысячи записей Person, это приводит к . тысячи дополнительных вызовов.
Решением проблемы с производительностью было бы создание представления в базе данных и непосредственная привязка к нему.
Представьте:
Код: Выделить всё
SELECT
PersonName,
(SELECT TOP 1 MealDateTime
FROM Meal
WHERE Meal.PersonId = Person.Id)
FROM
Person .....
Но это представление теперь содержит некоторую бизнес-логику (получение последнего приема пищи), которая дублирует свойство LastMealDateTime в классе Person. Я не хочу иметь несколько мест, где мы выполняем эту логику.
Это очень простой пример с очень простой бизнес-логикой, и, честно говоря, я бы, вероятно, позволил чему-то вот так, но если бы логика была намного сложнее, мы бы ее продублировали.
Какие изящные решения придумали люди, чтобы обойти эту проблему?
Подробнее здесь: https://stackoverflow.com/questions/791 ... ness-logic