При разработке Framework Foton использовались принципы DRY, SOLID, KISS.
В соответствии с этим при разработке своего приложения старайтесь следовать им:
- выделяйте функционал в отдельные объекты, либо методы.
декомпозируйте решения (разбивайте сложные задачи на простые). - пишите код настолько просто, чтобы и через год вы сами смогли в нем разобраться.
- при написании методов или объектов старайтесь предусмотреть возможность расширения вашего функционала без изменения вашего кода, либо с его минимальными изменениями.
- При указании путей к файлам работайте через $this->core->git() и указывайте пути от корня системы $FS->path
- При использовании методов в своем методе используйте сквозные параметры, чтобы в идеале все параметры принимаемые внутренними методами вашего метода косвенно или напрямую зависели от переданной в метод сигнатуры.
Требования к синтаксису:
- Нежелательно использование альтернативного синтаксиса (через : ?,endif; и т. д.)
- для облегчения чтения кода и определения пределов алгоритмов в различных IDE, по стандартам конвенции Foton используется стандартный синтаксис
if(){}else{],foreach(){},for(){}, - для представлений используйте функционал шаблонизатора Foton, тогда вместо endif; вы можете использовать @elsif{ваше условие} или @elsif[ваше условие] - конструкции равнозначны.
- Не используйте смешанный код (в одном файле css,js,php,html код, это затрудняет поддержку и чтение вашего кода)
- Соблюдайте чистоту кода и отступы.
При создании представления внешней части вашего приложения вы также можете использовать другие шаблонизаторы. - По возможности не используйте операторы switch case, особенно в сложных алгоритмах и там где количество проверок больше двух, это усложняет чтение кода.
Другие требования:
- Файлы должны быть в кодировке UTF-8 без BOM-байта.
- Имена класса и его метода не должны совпадать.
- Не используйте слишком часто статические методы, когда можно обойтись без них, это увеличивает время работы ваших методов, системе каждый раз приходится инициализировать ваш класс.
- При использовании большого объема данных для расчетов используйте сохранение данных в переменные, используйте обратный отчет для перебора данных.
- Используйте буферизацию ob_start() только через стандартные средства системы, иначе это может усложнить рефракторинг вашего приложения в дальнейшем.
- Не используйте метки и прерывания php без веской на то причины.
При создании сигнатур методов присвойте им default значения, и проверяйте значения сигнатур на входе, это поможет избежать ошибок при копировании метода разработчиком в контроллер, либо при неправильном использовании.
Используйте обработку ввода данных в модели, либо с помощью класса Foton\Lib\Valid и с использованием соответствующих методов ядра при получении $_REQUEST данных, и других незащищенных данных пользователя перед обработкой контролером.
При изменении метода в дочернем классе используйте по возможности конструкцию по типу такой:
<?php
public function method() {
$this_method = parent::method();
$this_method = $this->new_method($this_method);
return $this_method;
}То есть, вместо копирования кода или полного переопределения мы получили метод родителя и обработали его в соответствии с новыми требованиями, таким образом вы поддержите код предыдущего разработчика и следующему будет проще понять логику изменения вашей архитектуры.
Если вы не хотите видоизменения вашего метода финализируйте его (указав final) и укажите эти методы в комментариях к вашему классу.
Нельзя переопределять методы ядра, или переписывать их, так как при обновлении изменения будут удалены и следующему разработчику это может составить большие трудности, когда привычный метод начнет проявлять себя не так как должен, для изменения вы можете воспользоваться trait Custom_core.
Общие методы для всей системы вы можете создать в глобальном контроллере, при обращении к вашему методу в классе вы можете вызвать класс new \CGlobalsSite или же new \CGlobalsAdmin в административной панели, вы можете использовать такую конструкцию
<?php
if(isGlobalAdmin(название_вашего_mvc)){
$global = new \CGlobalsAdmin;
}
else{
$global = new \CGlobalsSite;
}
а в представлении $glob['вашметод']