This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
rukovodstvo:rukovodstvo_razrabotchika [07.05.15 в 15:50] maslov [Правила оформления кода] |
— (current) | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Руководство разработчика команды «KAD :: Systems» ====== | ||
| - | Добро пожаловать в нашу команду! | ||
| - | Мы занимаемся разработкой сайтов на системе управления HostCMS 6.x, а также их доработкой и технической поддержкой. Все взаимодействия мы производим внутри нашей системы для работы с клиентами, которая показала себя очень эффективно. Данная система носит название «KAD :: Outsource». Она является основным инструментом для связи всех участников процесса разработки. Регулярно мы обновляем её и дорабатываем новый функционал. | ||
| - | Данное руководство состоит из двух разделов. Первый из них – это правила и стандарты, принятые в нашей команде. Второй – практические советы и рекомендации. | ||
| - | ===== Правила и стандарты ===== | ||
| - | ==== Правила оформления кода ==== | ||
| - | Независимо от уровня профессионализма или отличительных особенностей синтаксиса, очень просто написать неряшливый или малопонятный код. Трудный для чтения код сложен в обслуживании и отладке. Скверный стиль кодирования ассоциируется с недостатком профессионализма.\\ | ||
| - | В нашей команде мы используем единый стиль программирования. Помимо удобочитаемости такого кода, красивый код говорит о нашем профессионализме. Если вы ставите над кодом копирайты, то есть подписываетесь именем нашей команды, то ваш код должен быть на уровне. Иначе вы ставите под угрозу репутацию самой команды и каждого из её участников. | ||
| - | Основные правила оформления кода:\\ | ||
| - | - Правильное именование переменных и функций. | ||
| - | * Имена глобальных переменных и констант должны вводиться в верхнем регистре | ||
| - | * Префикс переменной определяет её тип. Для переменной типа string следует использовать префикс «s», например <php>$sInput</php>. Для bool – «b». Для объектов – это «o», например, <php>$oBook</php>, для массива - «a». При этом, если у нас есть массив с данными одного типа, то помимо префикса массива, нужно указывать еще и тип элементов массива, например, <php>$aoBooks</php>. Кстати, предусмотрен префикс и для смешанных типов mixed – «m». | ||
| - | * Переменные, определенные в классе, как private всегда носят префикс «_», например, <php>$_oController</php> | ||
| - | * Временные переменные и итераторы следует называть коротко. Например, i, j, k, l, m, n. Для строковых и числовых временных переменных рационально использование названий без префикса, например <php>$name, $pass, $counter</php>. | ||
| - | * Переменные, использующие несколько слов в названии, пишутся слитно, без знака «_». Например, <php>$oBookComment</php>. Но если речь идет о константе или глобальной переменной, то здесь целесообразно использование знака «_». Например, <php>$CACHE_DIR</php>. | ||
| - | * Для имен методов и функций следует применять те же правила, что и для переменных. Начинаться имена методов и функций должны с символов в нижнем регистре. | ||
| - | * При создании модели объекта с неопределенной выборкой, например, <php>$oShopItems = Core_Entity::factory(‘shop_item’)</php> имя переменной должно быть во множественном числе с содержанием префикса o - object. При уточнении выборки и получении массива объектов <php>$aoShopItems = $oShopItems->findAll()</php> префикс должен быть ao - array of objects. При создании модели конкретного объекта имя переменной должно быть в единственном числе, например, <php>$oShopItem = Core_Entity::factory(‘shop_item’, 25)</php>. | ||
| - | - Использование пустого пространства и фигурных скобок. | ||
| - | * Чтобы усилить логическую структуру кода, следует использовать переносы строк – пустое пространство. Не бойтесь ставить переносы строк, давайте коду как можно больше свободы. | ||
| - | * Cледует разбивать блоки инициализации ряда переменных по логическому смыслу, например<code php> | ||
| - | $name = «testname»; | ||
| - | $login = «testlogin»; | ||
| - | $pass = «testpass»; | ||
| - | $oSite = Core_Entity::factory('site', $site_id); | ||
| - | $oUser = Core_Entity::factory('user', $user_id); | ||
| - | $oController = new Core_Controller($oUser); | ||
| - | </code>Первый блок с переменными содержит какие-то предустановленные значения. Второй – создание объектов. Третий – контроллера. Следует записать так:<code php> | ||
| - | $name = «testname»; | ||
| - | $login = «testlogin»; | ||
| - | $pass = «testpass»; | ||
| - | $oSite = Core_Entity::factory('site', $site_id); | ||
| - | $oUser = Core_Entity::factory('user', $user_id); | ||
| - | |||
| - | $oController = new Core_Controller($oUser); | ||
| - | </code> | ||
| - | * Управляющие конструкции – условия и циклы следует отделять переносами. Например,<code php> | ||
| - | $bonus = 0; | ||
| - | |||
| - | // Вычисляем сумму бонусов товаров | ||
| - | foreach ($aoShopOrderItems as $oShopOrderItem) | ||
| - | { | ||
| - | $bonus += $this->getBonus($oShopOrderItem->shop_item_id); | ||
| - | } | ||
| - | |||
| - | return $bonus; | ||
| - | </code> | ||
| - | * Фигурные скобки всегда следует отделять переносом строки. | ||
| - | * Отступы | ||
| - | * Отступы внутри управляющих конструкций должны присутствовать обязательно. | ||
| - | * Также отступы и переносы строк следует использовать в сложных условиях и в сложных конструкциях, подразумевающих создание вложенных объектов.<code php> | ||
| - | if (isset(Core_Page::instance()->object) | ||
| - | && strpos( | ||
| - | get_class(Core_Page::instance()->object), | ||
| - | 'Informationsystem_Controller_Show' | ||
| - | ) !== false | ||
| - | ) | ||
| - | { | ||
| - | $Informationsystem_Controller_Show->addEntity( | ||
| - | Core::factory('Core_Xml_Entity') | ||
| - | ->name('current_group_id') | ||
| - | ->value(intval(Core_Page::instance()->object->group)) | ||
| - | )->addEntity( | ||
| - | Core::factory('Core_Xml_Entity') | ||
| - | ->name('current_item_id') | ||
| - | ->value(intval(Core_Page::instance()->object->item) | ||
| - | ) | ||
| - | ); | ||
| - | }</code> | ||
| - | - Не используйте оператор echo для вывода html кода. Следует использовать закрывающие и открывающие php теги: <html><?php ?></html> | ||