DDD repository/facade implementation + bounded context relationship

321
01 июня 2017, 06:22

Вопрос в следующем, как лучше реализовать механизм 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();

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

Можете подсказать, как бы вы поступили/поступаете в данной ситуации.

READ ALSO
Почему WrapPanel не работает внутри ScrollViewer с VerticalScrollBarVisibility=&ldquo;Auto&rdquo;?

Почему WrapPanel не работает внутри ScrollViewer с VerticalScrollBarVisibility=“Auto”?

Ориентация WrapPanel перекрываетсяВ результате вместо столбцов получается обычная прокрутка вниз

196
Как инвертировать прокрутку между VerticalScrollBar и HorizontalScrollBar?

Как инвертировать прокрутку между VerticalScrollBar и HorizontalScrollBar?

Как инвертировать прокрутку между VerticalScrollBar и HorizontalScrollBar ?

228
Формат времени в DateTimePicker не понимает tt

Формат времени в DateTimePicker не понимает tt

Попытка установить кастомный формат времени для DateTimePicker не дает нужного результатаДокументация по компоненту говорит, что для показа AM/PM нужно...

336
dll как массив байтов

dll как массив байтов

Можно ли сохранить dll как массив байтом а затем загрузить массив в память(не на диск а именно в память) программы через AssemblyLoad что бы использовать...

291