Вопрос в следующем, как лучше реализовать механизм 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();
Тогда инъекцию нужно будет провести только в этом месте. Но если ты имеешь большую модель, то количество таких методов в репозитории будет огромным, а их названия будут сводить с ума.
Можете подсказать, как бы вы поступили/поступаете в данной ситуации.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Ориентация WrapPanel перекрываетсяВ результате вместо столбцов получается обычная прокрутка вниз
Как инвертировать прокрутку между VerticalScrollBar и HorizontalScrollBar ?
Попытка установить кастомный формат времени для DateTimePicker не дает нужного результатаДокументация по компоненту говорит, что для показа AM/PM нужно...
Можно ли сохранить dll как массив байтом а затем загрузить массив в память(не на диск а именно в память) программы через AssemblyLoad что бы использовать...