besogonskiy
@besogonskiy

Можно ли использовать доп. обращения к базе во благо красоты кода?

Задаюсь вопросом. Когда пишешь код, в стиле ООП, но при этом обращаешься к базе нужно ли стремиться к сокращению количества обращений к базе? Например, код:

static funtion ProductExists( $name ) {
    return  Product::where('name', $name)->exists();
}

static function blablabla( $data ) {
   if (Self::ProductExitst( $data['name'] ) {
        $id = Product:: where('name', $data['name'])->first()->id;
        ProductComment::where('product_id', $id ) .....
        ProductDocuments::....
   }
}

Или целесообразнее не делать вызов метода ProductExists, а сразу

$product = Product:: where ( 'name', $name)->first();
if ( $product ) {
             ProductComment::where('product_id', $product->id ) .....
}

В первом случае мы сначала делаем запрос к моделе, за которым последуюет запрос к базе данных.
потом мы по сути делаем снова запрос к базе данных чтоб получить нужные данные и уже использовать их в коде.

Во втором случае мы сразу получаем данные (если они есть) и если они есть, то используем их.

Так нужен читаемый стиль ООП для подобных случаев? он улучшает читаемость, но увеличивает число обращений к базе.

Ну это самый простой может не доконца раскрывающий вопрос случай. Я хочу узнать как православнее делать.

Подскажите что да как
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 2
AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"
А при чем тут вообще ООП? ООП не говорит нам как часто нужно делать запросы к базе, какие запросы писать. ООП предлагает работать с объектами. При чем тут читаемость вообще? Я могу прочитать как несколько вызовов методов обращения к бд, так и один.
Сокращение колл-ва обращений к базе - не ООПешный подход. Это подход оптимизации производительности. Если у вас есть 1 запрос, ваш код будет работать быстрее, чем если бы запросов было 2. Читаемость кода улучшает грамотное проектирование методов - разделение ответственности, правильные имена и многое другое.
В данном случае нет вообще никакого смысла делать несколько одинаковых запросов. В вашем вы скорее всего просто получите ошибку, если элемент в базе не найден. Если нет, то проверки
if ( $product ) ...
хватит сполна.
Ответ написан
@AlexSku
Программист по автоматике
Способы повышения скорости:
1) Хранимые процедуры. (не помню, если такой метод как включение параметров - уже давно не прикасался к БД). Число процедур можно сделать любым.
2) Последовательность объединения таблиц (Join), когда сначала надо применять самые эффективные фильтры (сокращающие выборки)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Sabris Москва
от 40 000 до 50 000 ₽
AVD Москва
от 120 000 до 150 000 ₽
Sports.ru Москва
До 250 000 ₽
26 февр. 2021, в 22:16
10000 руб./за проект
26 февр. 2021, в 21:56
20000 руб./за проект