Профессиональное программирование на PHP

Страница 208 из 591


214 Глава 8 Проектирование API-интерфейса

1 Функции и производительность в РНР

I Здесь, а также в руководствах по повышению производительности, сказано, что вызов

1 функций в РНР является "медленной" операцией. Это означает, что при вызове функций

1 существуют издержки. Издержки небольшие, но при обработке сотен или тысяч страниц

I в секунду их следует учитывать, особенно, если функция вызывается в цикле.

I Это абсолютно не означает, что следует избегать использования функций. Дональд Кнутт

I (Donald Knuth), один из патриархов компьютерной науки говорил: "преждевременная оптими-

| зация — корень всех зол". Оптимизация и регулировка часто влекут за собой затраты при со-

1 провождении. С этими затратами нельзя мириться, если полученный аыигрыш производи-

1 тельности того не стоит. Писать код следует так, чтобы он был удобным в сопровождении.

I Необходимо убедиться, что код можно легко реорганизовать. Следует проанализировать эф-

1 фективность кода в уже работающем проекте (с помощью методик, описанных в части IV,

1 "Производительность") и реорганизовать те части кода, которые неприемлемо дороги.

I Обход организационных методик на ранней стадии гарантирует, что код будет быстрым,

I но не будет расширяемым и удобным в использовании.

Сохранение простоты классов и функций

Как правило, отдельная функция или метод должна решать одну простую задачу. Простые функции затем используются другими функциями, таким образом, решаются сложные задачи. Данная методология предпочтительнее написания монолитных функций, поскольку она стимулирует повторное использование кода.

В примере кода для расчета налогов процедура разделена на две функции: Commerce_calculateTax () и вспомогательная функция, которую она вызывает, Commerce_calculateStateTax (). Подобное разделение процедуры означает, что функцию Commerce_calculateStateTax О можно применять для расчета местных налогов в любом контексте. Если бы логика данной функции была встроена в Commmerce_calculateTax () , то код пришлось бы дублировать при необходимости использовать его вне контекста расчета налогов на покупку.

Именование

Создание пространства имен является очень важным мероприятием в любом крупном основании кода. В отличие от других языков написания сценариев (например, Perl, Python, Ruby) РНР не обладает реальными пространствами имен или формальной системой создания пакетов. В отсутствие встроенных средств создание непротиворечивых соглашений по именованию становится важнейшей задачей разработчика. Рассмотрим следующий фрагмент кода:

$number = $_GET['number']; $valid = validate($number); if($valid) {

II ....

}

Глядя на код, невозможно понять, что он может делать. Изучив цикл (в данном случае он закомментирован), можно найти некоторые контекстуальные ключи к разгадке, но все равно остается две проблемы.

■ Неизвестно, где определяются функции. Если они определяются не в коде страницы (а определения функций почти никогда не следует помещать в код страницы, поскольку это означает невозможность их повторного использования), то как определить, в какой библиотеке они объявлены?




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006