Я изо всех сил пытаюсь понять, как лучше всего запросить хранилище.
Три фактора, которые бросают меня через цикл сейчас:
- Тип возвращаемых данных
- Столбцы для выполнения запроса на
- Количество возвращаемых записей
Точка 1
В отношении первого вопроса:
У меня есть репозитории с множеством методов, которые возвращают комбинацию как сущностей, так и скалярных значений.Это, кажется, приводит к «методу взрыва».Должен ли я всегда возвращать объект Entity?Как мне запрашивать объекты, в которых мне нужен только один столбец?
Точка 2 При выполнении запроса я должен включать каждый столбец в таблицу, даже если мне нужен только один или два столбца?Если я создаю для этого конкретные запросы, это приводит к увеличению числа методов в репозитории
Точка 3 Как мне указать условия для запроса?Я читал о спецификациях, но, насколько я понимаю, вы просматриваете возвращенные записи и отфильтровываете те, которые передаются в новую коллекцию.Это не кажется хорошей идеей с точки зрения производительности.Прямо сейчас я просто создаю новый метод в Repo, такой как getNameById (), который инкапсулирует условие.
Пожалуйста, обратите внимание, что я не использую ORM, у меня просто сырой sql в моих репозиториях .
Обновление
Точка 1: Основываясь на ответах и небольшом количестве исследований, это будет хорошей реализацией?
Прямо сейчас у меня есть большой репозиторий, который возвращает смесь скалярных объектов и объектов типа сущности (все одна и та же сущность).Я думаю, я мог бы значительно уменьшить это, если бы я просто использовал метод GetUser (userId) и забыл написать методы, которые просто возвращают значения в один столбец.
Например, если мне нужно вернуть имя пользователя, я мог бы вызватьМетод GetUser (userId), который увлажняет объект User, а затем на уровне сервиса просто фильтрует его по имени пользователя.
Другой способ - использовать некоторый класс QueryBuilder, который я мог бы передать в репозиторий, который мог бы бытьанализируется для генерации правильного sql.
Point 2
Оглядываясь назад, это очень похоже на первый пункт, и мое текущее решение будет просто захватить все поля таблицы.Это компромисс между производительностью и ремонтопригодностью.
Точка 3
Мне понадобится какой-то пункт, где.Я не уверен, если это имеет смысл делать через спецификацию или просто строку SQL.Мое текущее решение состоит в том, чтобы создать новые методы для этих типов, но я хотел бы что-то более общее для репозитория
В целом, все еще изучаю это ... Я хотел бы услышать больше информации об этом или ссылки накниги или ссылки, которые связывают все это вместе.