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