Должен ли я использовать запрос ограниченных полей или объект всех полей? - PullRequest
1 голос
/ 21 марта 2019

Я пытался включить шаблон репозитория в свое приложение PHP, свободно следуя этому примеру .

Я пытаюсь выбрать между:

  1. ограничение, какие поля я получаю из базы данных
  2. извлечение их всех и сохранение их в объекте домена.

Принятый ответ в теме, которую я связал, показывает способ реализации варианта 1. Второй ответ показывает, почему может быть лучше получить полные объекты вместо этого.

В моем случае для получения полных объектов часто требуется от 50 до 250 полей. Получить массив этих объектов, и это будет много полей, которые могут повлиять на производительность приложения. Вот почему я склоняюсь к тому, чтобы выборочно выбирать поля, которые я получаю, поскольку мне обычно требуется до 10 для выполнения обычных операций.

Если я выберу выборочный подход, я не смогу использовать доменные объекты для хранения данных, и у меня могут возникнуть проблемы, о которых упоминал «второй ответ».

  1. В результате вы получите практически одинаковые данные по многим запросам. Например, в случае с пользователем вы в конечном итоге напишите один и тот же select * для многих вызовов. Один вызов получит 8 из 10 полей, одно получит 5 из 10, один получит 7 из 10. Почему бы не заменить всех одним вызовом, который получает 10 из 10? Причина, по которой это плохо, заключается в том, что повторно анализировать / тестировать / издеваться - убийство.
  2. Со временем становится очень сложно рассуждать о вашем коде на высоком уровне. Вместо утверждений типа «Почему пользователь такой медленный?» вы в конечном итоге отслеживаете разовые запросы, поэтому исправления ошибок, как правило, небольшие и локализованные.
  3. Действительно сложно заменить основную технологию. Если вы сейчас храните все в MySQL и хотите перейти на MongoDB, заменить 100 специальных вызовов намного сложнее, чем несколько объектов.

Я все еще мог бы использовать доменные объекты для операций Create Update и Delete, но операции Read должны были бы храниться в простых объектах или ассоциативных массивах, согласно шаблону CQRS . У меня есть некоторые более сложные запросы, которые в настоящее время включают в себя объединения, которые было бы трудно реплицировать с объектами домена, без дополнительных вызовов БД и обработки, которые база данных обычно обрабатывает в 1 запросе.

Учитывая все это, имеет ли смысл для меня использовать доменные объекты только для операций чтения или вообще? Я упускаю некоторые другие преимущества, которые могут предоставить доменные объекты, чтобы помочь с проблемами, о которых я говорил?

...