besogonskiy
@besogonskiy
работаю php laravel разработчиком.

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

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

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 ) .....
}

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

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

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

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

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

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

Похожие вопросы