Должен ли я использовать запрос с ограниченными полями или объект со всеми полями?

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

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

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

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

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

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

  1. You end up with essentially the same data across many queries. For example, with a User, you'll end up writing essentially the same select * for many calls. One call will get 8 of 10 fields, one will get 5 of 10, one will get 7 of 10. Why not replace all with one call that gets 10 out of 10? The reason this is bad is that it is murder to re-factor/test/mock.
  2. It becomes very hard to reason at a high level about your code over time. Instead of statements like "Why is the User so slow?" you end up tracking down one-off queries and so bug fixes tend to be small and localized.
  3. It's really hard to replace the underlying technology. If you store everything in MySQL now and want to move to MongoDB, it's a lot harder to replace 100 ad-hoc calls than it is a handful of entities.

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

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

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

brainoverflow98 31.12.2019 18:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
65
0

Другие вопросы по теме