Мы используем несколько отдельных классов с суффиксами -repository
для извлечения данных из базы данных; для каждой таблицы свой репозиторий.
Например, у нас есть customerrepository
класс, который имеет все виды методов для поиска клиентов, и класс, который имеет все виды vacancyrepository
методов для поиска вакансий.
У меня есть два вопроса об этом способе ведения дел:
Как насчет получения данных, которые охватывают несколько таблиц? Например, у меня есть экран, который показывает всех клиентов, которые еще не создали вакансию. Могут ли
customerrepository
методы использования изvacancyrespository
или оба хранилища возвращать результаты, и есть ли класс в иерархии выше (назовем его adataservice
), который получает результаты из обоих хранилищ и объединяет их в 1 результат?сколько логики может обработать такой репозиторий?
Я думаю, что это нормально для реализации 'where active == true' в хранилище для извлечения только активных записей, или даже эта простая логика должна обрабатываться классом выше в иерархии (назовем это adataservice
)?
Вот пример, с которым я столкнулся:
У нас есть список вопросов, который содержит один или несколько вопросов.
Вопрос может иметь результат, который хранится в отдельной таблице.
Поэтому, когда вы хотите получить общий результат из списка вопросов, вы должны объединить данные из questionlist
таблицы, таблицы вопросов и questionstatus
таблицы.
Сейчас у нас есть 3 разных репозитория для этих таблиц.
Если бы я спросил, questionlistrepository
каков общий результат для списка № 12, он должен был бы получить данные из двух других репозиториев и, следовательно, иметь некоторую логику, разрешено ли это?
Или есть тот, questionlistdataservice
который знает, какие репозитории использовать?
Еще одна вещь: наши репозитории могут привести к IQueryable
тому, что вызывающая служба может легко объединить результаты, но как насчет того, когда это не так, я не думаю, что это хорошая идея, чтобы извлечь все содержимое всех трех таблиц из база данных.