У меня есть функция, которая загружает список вещей из базы данных и помещает их в список выбора. Функция выглядит следующим образом:
(Псевдокод)
protected function Foo()
{
try {
get pdo instance
prepare statement
if (pdo query executes)
{
while (row = fetched rows)
{
do stuff with row
}
}
}
catch (PDOException $ex)
{
do error stuff here
}
}
NetBeans дает подсказку кода, что это слишком много строк и слишком много вложенных блоков. Я лично чувствую, что функция должна быть приемлемой. Я также чувствую, что разбивать логику на более мелкие функции немного глупо, но почему бы netbeans мне врать :)?
поэтому мои вопросы таковы:
Это плохая логика или мне хорошо идти вперед?
Я бы приветствовал любые предложения о том, как мне изменить дизайн функции, чтобы она соответствовала ограничениям NetBean.
редактировать:
Я не буду отвечать на свой вопрос, но в этом случае был один вложенный блок, который не был нужен. Pdo извлекается из одноэлементного класса, который имеет блок try / catch. Мне не нужно повторять это снова в этой функции, потому что исключение было бы уже поймано.
редактировать 2:
Снятие блока «попытка поймать» было похоже на ограбление Питера, чтобы заплатить Полу. Поэтому, если при создании экземпляра pdo возникает исключение, это не останавливает выполнение. Таким образом, мы пытаемся вызвать оператор prepare для объекта PDO, который не был правильно инициализирован. Это вынуждает нас выполнить еще один тест перед вызовом подготовки, просто возвращаясь к переработке исходной функции.
По моему опыту, это означает, что где-то вдоль линии моя логика нарушена. Я собираюсь вернуться к своему дизайну и вернуться обратно, если у меня есть что-то достойное, чтобы сказать.
Еще раз спасибо всем
Ваш код хорош. То, что предлагает NetBeans, не обязательно является правилом, которому вы должны следовать, и вы бы даже не волновались, если бы использовали какой-то другой редактор, например PHPStorm (В PHPStorm вы можете установить стиль кодирования, соответствующий PSR 1/2).
Вы могли бы по крайней мере покончить с одним вложением, используя то, что называется пункт охраны:
protected function Foo()
{
try {
get pdo instance
prepare statement
if (! pdo query executes) return;
while (row = fetched rows)
{
do stuff with row
}
}
catch (PDOException $ex)
{
do error stuff here
}
}
Я видел людей с разными предпочтениями, так как не существует жесткого и быстрого правила. Например Энтони Феррара лично думает он не должен выходить за пределы четырех вложенных уровней, где я лично считаю, что четыре уровня — это слишком много.
Суть в том, что вы должны минимизировать количество вложений и количество строк. Когда ваш метод слишком велик (иногда называется Божий метод), это означает, что вы делаете это неправильно.
Вы также можете посмотреть эту замечательную статью Уильяма Дюранда на эту тему, где он обсуждает несколько (фактически 9) предложений, предложенных Джеффом Бэй в своей книге. Антология ThoughtWorks
Также Исправление стандартов кодирования PHP твой друг.
Так:
Вы можете отменить оператор if и выйти из функции, если условие неверно, чтобы исключить один уровень вложенности. Логика выглядит тоже хорошо, хотя я.