Вопрос в следующем, как лучше реализовать механизм Include?
Предположим, у нас есть репозиторий и нам требуется загрузить сущность со связанными элементами, в сервисе мы можем использовать следующий код:
repo.Select<School>().Include(sc => sc.Students).Include(sc => sc.Teachers);
или даже переопределить операцию select и передавать коллекцию Include Expression в качестве параметра:
repo.Select<School>(sc => sc.Students, sc => sc.Teachers);
Cо временем наша школа становится платной, и мы создаем другой Bounded Context, в котором реализована логика по оплате / начислениям.
Еще через время нам понадобилось подружить две модели и мы хотим в нашем классе Student добавить NotMapped поле, которое бы определяло,например, имеет ли студент доступ к библиотеке (логика определения находится в другой модели).
И нам, в момент получения данных, нужно сделать инъекцию для класса Student:
Student student = repo.Select<Student>(p => p.Id == id);
bool access = ChargeService.GetBalanceInfo(id);
student.Init(access);
return student;
Теперь о проблеме, когда ты используешь Include в коде самого сервиса,тебе придется переписать кучу кода, чтобы сделать такую инъекцию.
Решение проблемы напрашивается - сделать отдельный метод в репозитории:
IEnumerable<School> GetSchoolWithStudentsAndTeachers();
Тогда инъекцию нужно будет провести только в этом месте. Но если ты имеешь большую модель, то количество таких методов в репозитории будет огромным, а их названия будут сводить с ума.
Можете подсказать, как бы вы поступили/поступаете в данной ситуации.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости