Здесь показаны различия между двумя версиями данной страницы.
Следущая версия | Предыдущая версия | ||
eaze:style_guide [2011/11/30 11:37] zenden создано |
eaze:style_guide [2012/01/10 22:06] (текущий) sergeyfast [Стиль именования] |
||
---|---|---|---|
Строка 2: | Строка 2: | ||
* Пишите код так, чтобы он был понятен не только вам, но и тем людям, которые будут поддерживать проект после вас | * Пишите код так, чтобы он был понятен не только вам, но и тем людям, которые будут поддерживать проект после вас | ||
* В коде не должно быть так называемых "магических чисел", т.е. когда в исходном тексте встречается некоторое значение и неочевидно, что оно означает. Такие магические значения должны быть вынесены в константы (в среде PhpStorm это легко делается с помощью комбинации Ctrl+Alt+C ) | * В коде не должно быть так называемых "магических чисел", т.е. когда в исходном тексте встречается некоторое значение и неочевидно, что оно означает. Такие магические значения должны быть вынесены в константы (в среде PhpStorm это легко делается с помощью комбинации Ctrl+Alt+C ) | ||
- | + | * Используйте клёвые комментарии, они облегчат жизнь и вам, и другим разработчикам: <code=php>/** @var $varName VarType */</code> | |
- | Старайтесь весь JavaScript код выносить отдельно от шаблона (.tmpl.php) и подключать его через JsHelper для конкретных страниц. Не забывайте оборачивать его в $(function(){… }); | + | * Использование неинициализированных переменных и необъявленных полей класса недопустимо. Следующий код недопустим:<code=php> |
+ | // До этого места переменная $find нигде не определена | ||
+ | if ( условие ) { | ||
+ | $find = true; | ||
+ | } | ||
+ | $this->doSomething( $find ); // получаем NOTICE если 'условие' не выполняется | ||
+ | </code> | ||
+ | * На страницах не должно быть ошибок JavaScript. | ||
+ | * Итоговая страница должна проходить w3c-валидацию. | ||
====== Eaze ====== | ====== Eaze ====== | ||
* В action никогда не может быть sql запроса, потому что это «Controller», Получение данных нужно делать в «Model», т.е. в утилите. | * В action никогда не может быть sql запроса, потому что это «Controller», Получение данных нужно делать в «Model», т.е. в утилите. | ||
- | * В js можно использовать только те данные, которые были специальным образом переданы: | + | * В js можно использовать только те данные, которые были специальным образом переданы: <code>Response::setParameter( 'varName', ObjectHelper::ToJson($data) );</code> |
- | <code>Response::setParameter( 'varName', ObjectHelper::ToJson($data) );</code> | + | |
* При вызове методов класса *Factory параметр options[BaseFactory::CustomSql] нужно использовать только в случаях OR или EXISTS или сложных функций, например lower(email) = lower. В простых случаях для задания ORDER BY или LIMIT следует использовать options[BaseFactory::OrderBy] и search['pageSize'] соответственно. | * При вызове методов класса *Factory параметр options[BaseFactory::CustomSql] нужно использовать только в случаях OR или EXISTS или сложных функций, например lower(email) = lower. В простых случаях для задания ORDER BY или LIMIT следует использовать options[BaseFactory::OrderBy] и search['pageSize'] соответственно. | ||
* Не стоит использовать BaseFactory::CustomSql, если нужного поведения можно добиться с помощью Search Array в MFD. | * Не стоит использовать BaseFactory::CustomSql, если нужного поведения можно добиться с помощью Search Array в MFD. | ||
* При формировании строки options[BaseFactory::CustomSql] переменные нужно подставлять, предварительно сконвертировав их с помощью методов PgSqlConvert или MySqlConvert. | * При формировании строки options[BaseFactory::CustomSql] переменные нужно подставлять, предварительно сконвертировав их с помощью методов PgSqlConvert или MySqlConvert. | ||
* При вызове методов класса *Factory Не забывайте задавать опцию BaseFactory::WithoutPages => true в случае, когда вам не нужна пагинация (разбиение на страницы). Иначе, если у объекта в MFD включена опция "CanPages", вы получите неполный набор данных. Если вы забудете передать параметр в метод Count(), вы можете получить дробное количество элементов ;)). | * При вызове методов класса *Factory Не забывайте задавать опцию BaseFactory::WithoutPages => true в случае, когда вам не нужна пагинация (разбиение на страницы). Иначе, если у объекта в MFD включена опция "CanPages", вы получите неполный набор данных. Если вы забудете передать параметр в метод Count(), вы можете получить дробное количество элементов ;)). | ||
+ | * Вспомогательные функции, работающие с моделью (в т.ч. собственные запросы к БД или другим источникам данных), должны быть вынесены в класс <ИмяОбъекта>Utility, а функции, помогающие отобразить данные на странице (например, формирующие нетривиальный HTML), должны быть вынесены в класс *Helper. | ||
+ | * Не забывайте проверять параметры поиска, передаваемые в Factory::UpdateByMask(); UpdateByMask валидирует массив поиска и удаляет значения, равные нулю, поэтому есть шанс обновить СРАЗУ ВСЮ ТАБЛИЦУ. Внимательно проверяйте имена поисковых параметров и убедитесь в том, что они присутствуют в списках Search Array или Entity Attributes в MFD . | ||
+ | * Старайтесь весь JavaScript код выносить отдельно от шаблона (.tmpl.php) и подключать его через JsHelper для конкретных страниц. Не забывайте оборачивать его в $(function(){… }); | ||
===== Стиль именования ===== | ===== Стиль именования ===== | ||
- | * Статические методы классов нужно называть с большой буквы | + | * Статические методы классов нужно называть с Большой буквы |
- | * В именах методов и переменных используется camelCase | + | * В именах методов и переменных используется **lowerCamelCase** |
- | * В именах таблиц в TDM используется camelCase | + | * В именах таблиц в TDM используется **lowerCamelCase** |
+ | |||
+ | ===== Оформление кода ===== | ||