Иногда сталкиваюсь с критикой относительно повторов в коде, ну вот для примера Спойлер: Покупка/Продажа PHP: public static function buy(User $user, $unit_id, $count) { if (!Unit::findOne($unit_id)) { throw new Alert('Такой техники нет в игре'); } $user_unit = self::findOneBy('`user_id` = ? and `unit_id` = ?', [$user->id, $unit_id]); if (!$user_unit) { throw new Alert('Такая техника Вам ещё недоступна'); } if (!filter_var($count, FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]])) { throw new Alert('Вы неправильно ввели количество'); } $sum = $user_unit->getPrice($user->country_code) * $count; if ($sum > $user->{$user_unit->kind}) { throw new Alert('У Вас недостаточно ' . ($user_unit->kind == 'baks' ? 'баксов' : 'золота') . ' для покупки'); } $user_unit->amount += $count; $user_unit->save(); $user->{$user_unit->kind} -= $sum; } public static function sell(User $user, $unit_id, $count) { if (!Unit::findOne($unit_id)) { throw new Alert('Такой техники нет в игре'); } $user_unit = self::findOneBy('`user_id` = ? and `unit_id` = ?', [$user->id, $unit_id]); if (!$user_unit) { throw new Alert('Такая техника Вам ещё недоступна'); } if (!filter_var($count, FILTER_VALIDATE_INT, ['options' => ['min_range' => 1, 'max_range' => $user_unit->amount]])) { throw new Alert('Вы неправильно ввели количество'); } $sum = $user_unit->getPriceForSell($user->country_code) * $count; $user_unit->amount -= $count; $user_unit->save(); $user->{$user_unit->kind} += $sum; } Ну вот надо ли мне PHP: if (!Unit::findOne($unit_id)) { throw new Alert('Такой техники нет в игре'); } $user_unit = self::findOneBy('`user_id` = ? and `unit_id` = ?', [$user->id, $unit_id]); if (!$user_unit) { throw new Alert('Такая техника Вам ещё недоступна'); } выносить в отдельный метод? Это принципиально важно как-то? Я так размышляю, что если один из методов забрать в другое место, то он уже имеет свою целостность функционала, выполняя все проверки локально уже.
Да можно вынести в отдельный метод, только правильно его назвать и чтобы что-то возвращал полезное или там в свойство объекта складывал, чтобы повторных запросов не плодить на выемку данных.