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