Разработка:Стандарт кодирования — различия между версиями

Материал из DOF
Перейти к: навигация, поиск
(новая структура документа, по образцу http://docs.moodle.org/en/Development:Coding)
Строка 1: Строка 1:
 
== Правила оформления кода в проекте «Электронный деканат». ==
 
== Правила оформления кода в проекте «Электронный деканат». ==
  
=== Общие правила ===
+
 
 +
 
 +
=== Стиль кодирования ===
 +
==== Формат файлов ====
 
# Все файлы с кодом должны иметь расширение .php
 
# Все файлы с кодом должны иметь расширение .php
 
# Все html-шаблоны должны иметь расширение .html
 
# Все html-шаблоны должны иметь расширение .html
 
# Весь текст, включая исходный код, должен быть в кодировке utf-8 с оконачаниями строк в формет Unix
 
# Весь текст, включая исходный код, должен быть в кодировке utf-8 с оконачаниями строк в формет Unix
 +
# Окончания строк в формате Unix (LF - 0x0A)
 
# Все php-теги должны быть полными <?php ... ?>. Краткие теки <? ?> не допускаются
 
# Все php-теги должны быть полными <?php ... ?>. Краткие теки <? ?> не допускаются
=== Стиль кодирования ===
+
# Все отступы – 4 пробела. Не использовать TAB.
 +
# Длинна строки в коде не должна быть больше 80 символов. В некоторых случаях допускается 120, если это упростит читаемость кода.
 +
# Пробелы можно использовать свободно. Не надо бояться растягивать код для улучшения читабельности.
 +
==== Имена ====
 +
# Имена файлов должны состоять только из латинских символов, знака подчеркивания и точки. Имя файла обязательно должно иметь расширение. Рекомендуется использовать для именования файлов слова на английском языке.
 +
# Имена классов должны состоять из строчных латинских символов и знака подчеркивания. Рекомендуется использовать английские слова разделенных символом подчеркивания. Имя класса в плагине должно начинаться с префикса, соответствующего плагину. Если требуется, имя класса может включать преффикс и суффикс.
 +
# Имена функций и методов должны состоять из строчных латинских символов и знака подчеркивания. Имя функции в плагине должно начинаться с префикса, соответствующего имени модуля (dof_) и плагину, в котором объявлена (типплагина_кодплагина). Затем идет часть имени, описывающая выполняемое действие. Последняя часть - это существительное, обозначающее сущность, над которой это действие производится либо набор сущностей. Не должно быть пробелов между именем функции и скобками. Это относится и к объявлению функции, и к ее использованию. Параметры всегда должны иметь разумные значения по умолчанию, если это возможно. Пример: modname_get_string($identifier, $pluginname = NULL). Между ключевым словом function и именем функции должен быть только один пробел.
 +
# Имена параметров функций именуются по тем же правилам, что и переменные. Имя параметра должно быть кратким и информативным для сторонних программистов. Если параметр может быть не задан, используйте по умолчанию значение  null, для отличия этой ситуации от передачи параметра false, 0 или '' если это требуется).
 +
# Имена переменных - всегда легкие для чтения осмысленные слова английского языка, набранные в нижнем регистре. Несколько слов пишутся слитно. Но они должны быть как можно короче. Используйте имена во множественном числе для массивов объектов. Например: $courseid, $studentsgrades
 +
# Имена глобальных переменных, должны состоять полностью из заглавных букв. Пример: $CFG
 +
# Имена констант должны состоять из латинских символов в верхнем регистре и знака подчеркивания. Всегда начинаются с имени модуля (DOF). Если константа объявлена в плагине, она получает дополнительный префикс ТИППЛАГИНА_КОДПЛАГИНА. Слова в названии разделены символом подчеркивания. Пример: SITE_ID
 +
# true, false и null должны быть набраны в нижнем регистре
 +
# AND, OR, XOR должны быть набраны в верхнем регистре, не используйте сокращенные синонимы.
 +
==== Строки ====
 +
# Используйте одинарные кавычки, если в строке отсутствуют макроподстановки и эскейп-последовательности, а так же если в строке присутствует много двойных кавычек.
 +
# При макроподстановках в двойных кавычках заключайте переменные в фигурные скобки.
 +
# Объединение строк выполняется через оператор "точка" (.)
 +
==== Массивы ====
 +
# Не используйте отрицательных чисел для нумерации массивов (кроме случаев, когда это прямо требуется логикой программы).
 +
# Индексация массива может начинаться с любого положительного числа, обычно с 0.
 +
# При объявлении массива через функцию array() ставьте пробел после запятой при перечислении параметров. Длинные объявления можно переносить по строкам. При объявлении ассоциативных массивов помещайте на одну строку одну пару ключ-значение.
 +
==== Классы ====
 +
# Свойства класса должны объявляться до его методов.
 +
# Фигурная скобка пишется на следующей строчке после объявления имени класса, на одном уровне с ключевым словом class.
 +
# Объявление любого класса должно быть документировано по стандарту PHPDocumentor
 +
# Весь код внутри класса должен быть сдвинут на 4 пробела от уровня его объявления.
 +
# Объявление класса должно быть отделено от остального коду двумя пустыми строками.
 +
# Свойства класса должны объявляться напрямую при объявлении класса с указанием модификатора доступа (private (доступ извне запрещен), protected (разрешен доступ из наследников) или public)
 +
 
 +
==== Комментарии ====
 +
# Комментарии должны быть подробными и содержательными. Объяснять каждое объявление классов, функций и переменных. Каждый цикл и каждая ветвь условия должны быть пояснены содержательным смыслом выполняемых действий, например: "перебираем список товаров", "если пользователь не заполнил поле имя..."
 +
# Комментарии к функциям и классам оформляются в формате [http://manual.phpdoc.org/HTMLframesConverter/default/ PHPDoc]
 +
# Комментарии в строках должны быть в стиле '''//'''. Они должны быть понятными и располагаться над строкой комментируемого кода.
  
 +
==== Дата и время ====
 +
#Все даты и время в базе данных хранятся в [http://ru.wikipedia.org/wiki/Unix_timestamp Unix Timestamp] по [http://ru.wikipedia.org/wiki/UTC UTC] без учета летнего времени и пересчитываются в местное время при отображении.
 +
# Если определена только дата, то время устанавливается 12:00 по полудню на UTC.
 
=== Структура базы данных ===
 
=== Структура базы данных ===
  
Строка 16: Строка 55:
 
=== Работа с библиотеками Moodle ===
 
=== Работа с библиотеками Moodle ===
  
*Все отступы – 4 пробела. Не использовать TAB.
+
=== Другие правила ===
*Имена переменных - всегда легкие для чтения осмысленные слова английского языка, набранные в нижнем регистре. Несколько слов пишутся слитно. Но они должны быть как можно короче. Используйте имена во множественном числе для массивов. Например: $courseid, $studentsgrades
+
 
*Константы всегда в верхнем регистре, всегда начинаются с имени модуля. Слова в названии разделены символом подчеркивания. Пример: SITE_ID
+
*
*Имена глобальных переменных, состоят полностью из заглавных букв. Пример: $CFG
+
*
*Функции называются словами английского языка в нижнем регистре, разделенные символом подчеркивания. Начинаются с имени модуля. Затем идет часть имени, описывающая выполняемое действие. Последняя часть - это существительное, обозначающее сущность, над которой это действие производится либо набор сущностей. Не должно быть пробелов между именем функции и скобками. Это относится и к объявлению функции, и к ее использованию. Параметры всегда должны иметь разумные значения по умолчанию, если это возможно. Пример:
+
*
    modname_get_string($identifier, $pluginname = NULL)
+
 
 
*Ставьте один пробел между скобками и синтаксическими конструкциями. Это не относится к функциям и их параметрам. Пример:
 
*Ставьте один пробел между скобками и синтаксическими конструкциями. Это не относится к функциям и их параметрам. Пример:
 
     if ( $a >= max($key) )
 
     if ( $a >= max($key) )
Строка 37: Строка 76:
 
     ····<body>
 
     ····<body>
 
     }
 
     }
*Строки должны заключаться, если это возможно, одинарными кавычками.
+
 
*Двойные кавычки должны использоваться если:
+
 
**строка содержит интерпретируемые переменные;
 
**внутри строки должны использоваться кавычки (их можно заэкранировать слешем, но это немного снизит читаемость кода).
 
*Комментарии должны быть подробными и содержательными. Объяснять каждое объявление классов, функций и переменных. Каждый цикл и каждая ветвь условия должны быть пояснены содержательным смыслом выполняемых действий, например: "перебираем список товаров", "если пользователь не заполнил поле имя..."
 
*Комментарии к функциям и классам оформляются в формате [http://manual.phpdoc.org/HTMLframesConverter/default/ PHPDoc]
 
*Комментарии в строках должны быть в стиле '''//'''. Они должны быть понятными и располагаться над строкой комментируемого кода.
 
*Пробелы можно использовать свободно. Не надо бояться растягивать код для улучшения читабельности.
 
 
*При копировании объектов используйте PHP5-функцию копирования объектов. В MOODLE есть функция clone(), которая совместима и с PHP4 тоже.
 
*При копировании объектов используйте PHP5-функцию копирования объектов. В MOODLE есть функция clone(), которая совместима и с PHP4 тоже.
 
*Если вы копируете переменную, которая может содержать объект, то используйте функцию MOODLE fullclone().
 
*Если вы копируете переменную, которая может содержать объект, то используйте функцию MOODLE fullclone().
Строка 56: Строка 89:
 
*Не должно быть никакого SQL-кода за пределом справочников ([[Разработка:Структура#Справочники|плагинов storage]])
 
*Не должно быть никакого SQL-кода за пределом справочников ([[Разработка:Структура#Справочники|плагинов storage]])
 
*Кроме [[Разработка:Структура#Интерфейс пользователя|плагинов im]] никакие другие плагины не должны принимать запросы по http. Исключение могут составлять плагины [[Разработка:Структура#Синхронизации|sync]], которые могут принимать входящие soap-запросы и т.п. (но и они не должны реализовывать веб-интерфейс). При этом все плагины должны быть безопасны на случай, если злоумышленик попытается обратиться по прямой ссылке к одному из их файлов (следует предотвращать запуск файла по прямой ссылке, если это может нанести урон безопасности).
 
*Кроме [[Разработка:Структура#Интерфейс пользователя|плагинов im]] никакие другие плагины не должны принимать запросы по http. Исключение могут составлять плагины [[Разработка:Структура#Синхронизации|sync]], которые могут принимать входящие soap-запросы и т.п. (но и они не должны реализовывать веб-интерфейс). При этом все плагины должны быть безопасны на случай, если злоумышленик попытается обратиться по прямой ссылке к одному из их файлов (следует предотвращать запуск файла по прямой ссылке, если это может нанести урон безопасности).
*Все даты и время в базе данных хранятся в [http://ru.wikipedia.org/wiki/Unix_timestamp Unix Timestamp] по [http://ru.wikipedia.org/wiki/UTC UTC] без учета летнего времени и пересчитываются в местное время при отображении.
+
 
*Если определена только дата, то время устанавливается 12:00 по полудню.
 
  
 
== Работа со стандартными библиотеками moodle ==
 
== Работа со стандартными библиотеками moodle ==

Версия 20:53, 4 мая 2009

Правила оформления кода в проекте «Электронный деканат».

Стиль кодирования

Формат файлов

  1. Все файлы с кодом должны иметь расширение .php
  2. Все html-шаблоны должны иметь расширение .html
  3. Весь текст, включая исходный код, должен быть в кодировке utf-8 с оконачаниями строк в формет Unix
  4. Окончания строк в формате Unix (LF - 0x0A)
  5. Все php-теги должны быть полными <?php ... ?>. Краткие теки <? ?> не допускаются
  6. Все отступы – 4 пробела. Не использовать TAB.
  7. Длинна строки в коде не должна быть больше 80 символов. В некоторых случаях допускается 120, если это упростит читаемость кода.
  8. Пробелы можно использовать свободно. Не надо бояться растягивать код для улучшения читабельности.

Имена

  1. Имена файлов должны состоять только из латинских символов, знака подчеркивания и точки. Имя файла обязательно должно иметь расширение. Рекомендуется использовать для именования файлов слова на английском языке.
  2. Имена классов должны состоять из строчных латинских символов и знака подчеркивания. Рекомендуется использовать английские слова разделенных символом подчеркивания. Имя класса в плагине должно начинаться с префикса, соответствующего плагину. Если требуется, имя класса может включать преффикс и суффикс.
  3. Имена функций и методов должны состоять из строчных латинских символов и знака подчеркивания. Имя функции в плагине должно начинаться с префикса, соответствующего имени модуля (dof_) и плагину, в котором объявлена (типплагина_кодплагина). Затем идет часть имени, описывающая выполняемое действие. Последняя часть - это существительное, обозначающее сущность, над которой это действие производится либо набор сущностей. Не должно быть пробелов между именем функции и скобками. Это относится и к объявлению функции, и к ее использованию. Параметры всегда должны иметь разумные значения по умолчанию, если это возможно. Пример: modname_get_string($identifier, $pluginname = NULL). Между ключевым словом function и именем функции должен быть только один пробел.
  4. Имена параметров функций именуются по тем же правилам, что и переменные. Имя параметра должно быть кратким и информативным для сторонних программистов. Если параметр может быть не задан, используйте по умолчанию значение null, для отличия этой ситуации от передачи параметра false, 0 или если это требуется).
  5. Имена переменных - всегда легкие для чтения осмысленные слова английского языка, набранные в нижнем регистре. Несколько слов пишутся слитно. Но они должны быть как можно короче. Используйте имена во множественном числе для массивов объектов. Например: $courseid, $studentsgrades
  6. Имена глобальных переменных, должны состоять полностью из заглавных букв. Пример: $CFG
  7. Имена констант должны состоять из латинских символов в верхнем регистре и знака подчеркивания. Всегда начинаются с имени модуля (DOF). Если константа объявлена в плагине, она получает дополнительный префикс ТИППЛАГИНА_КОДПЛАГИНА. Слова в названии разделены символом подчеркивания. Пример: SITE_ID
  8. true, false и null должны быть набраны в нижнем регистре
  9. AND, OR, XOR должны быть набраны в верхнем регистре, не используйте сокращенные синонимы.

Строки

  1. Используйте одинарные кавычки, если в строке отсутствуют макроподстановки и эскейп-последовательности, а так же если в строке присутствует много двойных кавычек.
  2. При макроподстановках в двойных кавычках заключайте переменные в фигурные скобки.
  3. Объединение строк выполняется через оператор "точка" (.)

Массивы

  1. Не используйте отрицательных чисел для нумерации массивов (кроме случаев, когда это прямо требуется логикой программы).
  2. Индексация массива может начинаться с любого положительного числа, обычно с 0.
  3. При объявлении массива через функцию array() ставьте пробел после запятой при перечислении параметров. Длинные объявления можно переносить по строкам. При объявлении ассоциативных массивов помещайте на одну строку одну пару ключ-значение.

Классы

  1. Свойства класса должны объявляться до его методов.
  2. Фигурная скобка пишется на следующей строчке после объявления имени класса, на одном уровне с ключевым словом class.
  3. Объявление любого класса должно быть документировано по стандарту PHPDocumentor
  4. Весь код внутри класса должен быть сдвинут на 4 пробела от уровня его объявления.
  5. Объявление класса должно быть отделено от остального коду двумя пустыми строками.
  6. Свойства класса должны объявляться напрямую при объявлении класса с указанием модификатора доступа (private (доступ извне запрещен), protected (разрешен доступ из наследников) или public)

Комментарии

  1. Комментарии должны быть подробными и содержательными. Объяснять каждое объявление классов, функций и переменных. Каждый цикл и каждая ветвь условия должны быть пояснены содержательным смыслом выполняемых действий, например: "перебираем список товаров", "если пользователь не заполнил поле имя..."
  2. Комментарии к функциям и классам оформляются в формате PHPDoc
  3. Комментарии в строках должны быть в стиле //. Они должны быть понятными и располагаться над строкой комментируемого кода.

Дата и время

  1. Все даты и время в базе данных хранятся в Unix Timestamp по UTC без учета летнего времени и пересчитываются в местное время при отображении.
  2. Если определена только дата, то время устанавливается 12:00 по полудню на UTC.

Структура базы данных

Безопасность

Использование JavaScript

Работа с библиотеками Moodle

Другие правила

  • Ставьте один пробел между скобками и синтаксическими конструкциями. Это не относится к функциям и их параметрам. Пример:
   if ( $a >= max($key) )
   {
   
   ···· $c = $a;
   
   }
  • При использовании сторонних библиотек возможно отступление от пунктов 4, 5, 6. (см. пример). Это связано с экономией времени на переработку оформления библиотеки и сохранением стиля сопутствующего кода. Пример:
   class SomeCustomClass {function classMethod(){...}}
  • Блоки всегда ограничиваются фигурными скобками. При этом используется стиль Олмана:
   if (<cond>)
   {
   ····<body>
   }


  • При копировании объектов используйте PHP5-функцию копирования объектов. В MOODLE есть функция clone(), которая совместима и с PHP4 тоже.
  • Если вы копируете переменную, которая может содержать объект, то используйте функцию MOODLE fullclone().
  • Если функция не возвращает значений, то true обозначает успех, false - не успех. Если функция возвращает массив, в случае успешного выполнения, но отсутствия элементов в результате, функция должна возвращать пустой массив.
  • Все переменные перед первым использованием необходимо инициализировать.
  • Имя модуля может включать только строчные латинские буквы и содержать не более 20 символов.
  • Имена колонок БД, содержащих ключ по другой колонке в БД Free Dean's Office должны заканчиваться на id
  • Имена колонок в БД, содержащих ключ объекта в собственной БД Moodle должны начинаться на mdl_ (но не должны заканчиваться на id)
  • Следует избегать использования глобальных переменных.
  • Обращения к объектом Free Dean's Office выполняется через объект $DOF. При объявлении плагина он должен сохранить ссылка на объект $DOF в собственном свойстве dof и во всех собственных методов использовать для обращения $this->dof
  • Не должно быть никакого SQL-кода за пределом справочников (плагинов storage)
  • Кроме плагинов im никакие другие плагины не должны принимать запросы по http. Исключение могут составлять плагины sync, которые могут принимать входящие soap-запросы и т.п. (но и они не должны реализовывать веб-интерфейс). При этом все плагины должны быть безопасны на случай, если злоумышленик попытается обратиться по прямой ссылке к одному из их файлов (следует предотвращать запуск файла по прямой ссылке, если это может нанести урон безопасности).


Работа со стандартными библиотеками moodle

Этот раздел будет содержать справку по работе со стандартными пакетами moodle

Работа с moodleQuickForm

Работа с moodleExcelWorkbook

Работа с XMLDB