Файлы и модели в Coresky - energy-coresky/air GitHub Wiki

Файлы Coresky

Код первого крыла, содержащий классы SKY и HEAVEN, находится в файле sky.php. Файлы второго крыла в папке w2 (wing 2), смотрите таблицу:

Файл Строк,
размер
Функций,
классов
Описание
boot.php 194
7.4 kB
0, 1 класс генерации главного кэш-файла Coresky - sky_plan.php, который используется всегда
console.php 394
14.1 kB
0, 1 класс для использования в консольных скриптах. Используется скриптом sky. Этот класс умеет расширять список команд Coresky, консольными командами приложений и продуктов
core.php 584
18.9 kB
33, 5 код ядра Coresky. Загружается всегда, вместе с классами SKY и HEAVEN
css.php 161
5.5 kB
0, 1 класс CSS для работы со стилями css
dc_file.php 72
1.8 kB
1, 1 драйвер кэша для для файловой системы (dc - DriverCache)
dc_memcached.php 81
2.3 kB
1, 1 2do драйвер кэша
dc_redis.php 82
2.3 kB
1, 1 драйвер кэша для Redis
dd_mysqli.php 219
7.6 kB
0, 1 драйвер для MySqli (dd - DriverDatabase)
dd_oci.php 122
3.1 kB
0, 1 драйвер для Oracle
dd_odbc.php 122
3.1 kB
0, 1 2do драйвер для ODBC
dd_pg.php 132
3.5 kB
0, 1 драйвер для Postgres
dd_sqlite3.php 176
5.3 kB
0, 1 драйвер для SQLite3
debug.php 282
10.9 kB
0, 1 вспомогательный код для режима debug
dev.php 499
19 kB
0, 1 основной код инструмента разработки, только DEV
dev_c.php 429
15.8 kB
0, 1 контроллер web-инструмента разработки, только DEV
display.php 465
18.6 kB
0, 1 функционал для отображения разных типов данных
form.php 549
21.2 kB
0, 2 функционал для создания Coresky форм
gate.php 501
19.6 kB
0, 1 компилятор SkyGate для контроллеров
globals.php 413
15.5 kB
0, 1 функционал для поиска определений кода Coresky и кода приложений. Используется в "Global Reports"
install.php 348
13.3 kB
0, 1 функционал для задач, связанных с установкой приложений. Используется только на DEV, в утилите "Open SkyProject"
jet.php 544
21 kB
0, 1 компилятор представлений Jet
language.php 597
23.2 kB
0, 1 класс для организации мультиязычных приложений Coresky. Используется только на DEV
mvc.php 546
18.3 kB
1, 8 основные классы для организации MVC паттерна Coresky. Используется всегда при обработке web-запросов
plan.php 525
21.8 kB
2, 2 класс для реализации системы планов и продуктов Coresky. Загружается всегда, вместе с классами SKY и HEAVEN. Использует драйверы с префиксом dc_
processor.php 149
5.6 kB
0, 1 трейт используется в классе Jet.
rare.php 370
13.9 kB
0, 1 здесь содержится функционал, который используется редко, но нужен всегда, например, Rare::login(..)
rewrite.php 249
8.4 kB
0, 1 функционал для настройки Coresky rewrite, только DEV
root.php 517
24.8 kB
0, 1 функционал для диагностики и управления ядром Coresky. Используется в инструментах разработчика на DEV. Также может использоваться в root-админ разделе или на специальных страницах приложения на продакшн
schedule.php 246
8.4 kB
0, 1 класс для организации консольных cron скриптов. Задачи могут выполняться в параллельных отдельных процессах. Реализуется с помощью функции PHP popen(..)
sql.php 469
16.7 kB
0, 3 стандартные классы для работы с реляционными базами данных. Используют драйверы с префиксом dd_
svg.php 21
627 Bytes
0, 1 класс для работы с SVG
usage.php 358
15.1 kB
0, 1 класс для анализа использования кода, только DEV. Используется в "Global Reports"
user.php 220
8.4 kB
0, 1 базовый класс USER, для организации сессий и аккаунтов пользователей. Может быть заменен или расширен кодом приложения
vendor.php 156
6.1 kB
0, 1 класс для работы пакетами Composer, только DEV
wares.php 28
621 Bytes
0, 1 класс, наследуемый классами-инсталляторами продуктов, только DEV
xml.php 410
14.5 kB
0, 1 класс XML для работы с xml и html данными
yml.php 576
22 kB
1, 1 парсер Yaml
zml.php 9
58 Bytes
0, 1 2do
__data.yaml 186
11.6 kB
0, 0 Yaml данные: часовые пояса, языки планеты Земля (ISO 639-1), ключевые слова PHP, определения форм для класса Root и т.д.
__dev.jet 466
14.5 kB
template layout-шаблон, а также прочие шаблоны инструментов разработки, включая страницы "Main" и "Browse All Wares", только DEV
__glob.jet 410
14.1 kB
template шаблоны для страницы "Global Reports", только DEV
__img.jet 48
135.3 kB
template стандартные SVG изображения
__inst.jet 286
11.1 kB
template шаблоны для страниц "Open SkyProject", только DEV
__lng.jet 467
18.1 kB
template шаблоны для страниц "Open SkyLang", только DEV
__std.jet 544
19.6 kB
template стандартные шаблоны ошибок, а также, шаблоны для страниц "Open SkyGate"
__vend.jet 222
7.3 kB
template шаблоны для страниц "Browse All Vendors", только DEV

Всего в папке w2: 46 файлов. Другой основной код Coresky, смотрите в следующей таблице:

Файл Строк,
размер
Описание
sky.php 568
22.3 kB
код первого крыла, классы SKY и HEAVEN
sky 83
2.3 kB
скрипт для выполнения команд в консоли. Рекомендуется прописать к нему путь в переменной окружения PATH
etc/moon.php 825
33.7 kB
standalone инсталлятор sky-приложений, упакованных в файл с расширением *.sky
assets/dev.css 372
6.7 kB
стили для инструментов разработчика, только DEV
assets/dev.js 375
13.9 kB
javascript код для инструментов разработчика, только DEV
assets/sky.css 164
3.3 kB
стили для всех sky-приложений, работающих с web-интерфейсом. 2do: remove in the future
assets/sky.js 289
9.7 kB
javascript код для всех sky-приложений, работающих с web-интерфейсом. В файле определены функции и методы для реализации действий контроллеров с префиксом j_*, код для валидации Coresky форм, а также другой важный код

Итого Coresky это: 53 файлов, 17120 строк кода, 761.7 kBytes. В глобальной области видимости: 40 именованных функций PHP, 56 классов PHP, из них 3 интерфейса, 4 трейта и 0 перечислений.

Философия кода веб-приложений

Любой код для повторного использования, содержит некоторые части кода, которые используются чаще или реже в различных веб-приложениях написанных на нём. Если вообразить, что все веб-приложения на Земле (или хотя бы большая, значительная их часть), переписаны с использованием некоторого единого кода для повторного использования, который значительно помог упростить разработку этих приложений, то окажется, что часть такого кода, используется всегда. Имеет смысл разделить код для повторного использования, по частоте потенциально возможного применения. Назовем "крыло 1" (wing 1), код, который используется всегда. Такому коду следует уделить наибольшее внимание. Другой код Coresky - крыло 2, содержится в папке wing 2 (main/w2). В папке main/w3 (крыло 3) содержатся классы продуктов и код приложений. Остальной код приложений (контроллеры, модели и представления) уникален, явно наследует повторяющуюся архитектуру MVC и использует код крыльев 1,2,3. Классы в папке main/mvc всегда имеют однобуквенные префиксы и постфиксы в противоположность классам крыльев, это гарантирует, что их имена не пересекутся. Для классов в папках main/w3, рекомендуется использовать нотации без подчеркивания: PascalCase или camelCase.

Классы Coresky, кроме SKY и HEAVEN находятся в папке main/w2. Этот список всегда можно увидеть с помощью утилиты "глобальные определения". Для классов крыльев, в том числе в папке main/w3 продуктов, необходим глобальный реестр (и модерация продуктов) в репозитории кода Coresky для обеспечения уникальности имен, в том числе с классами PHP. Это скорее хорошо, чем плохо: к сожалению, в репозитории https://packagist.org/ много мусорного кода. Кроме того, продукты могут содержать классы, использующие пространства имен, которые соответствуют именам продуктов. Классы с namespace рекомендуется использовать для PROD-продуктов. Читайте о разрешении коллизий в именах в статье "Coresky планы и продукты".

Код приложений

Контроллеры и модели приложений, располагаются в папке main/mvc. Первые имеют однобуквенный префикс или постфикс c_ в имени файлов, а модели, в основном, используют префикс m_ или t_. Классы моделей приложений, должны наследовать базовые классы Model_m и Model_t соответственно, смотрите файл main/w2/mvc.php. Другой код, осуществляющий бизнес логику приложений, для которого не требуется наследование вышеуказанных базовых классов, располагается в папке main/w3. Ядро Coresky осуществляет автозагрузку классов, для любого такого кода, автоматически и для основного приложения и для продуктов.

М-модели

М-модели это "пустышки", точнее они содержат некоторый функционал, но класс Model_m является базовым для определений других базовых моделей, например Model_t. Тем не менее, можно создавать модели приложений на базе М-моделей, если базовые методы модели Model_t не нужны и/или код модели не связан с конкретной таблицей в некоторой базе данных. Пример файла main/mvc/m_test.php:

class m_test extends Model_m
{
    protected $table = 'tbl';

    function head_y() {
        return SQL::open('other-db-connection');
    }

    function some_row() {
        return $this->sql('-select * from $_ where id=1');
    }
}

В примере выше - перегружено свойство protected $table и метод m_test::head_y(). Свойство переопределяет дежурную таблицу, а метод - соединение с БД по умолчанию. Обычно, такую перегрузку делать не нужно, так как дежурная таблица может установится автоматически по имени класса модели (test). А соединение с БД скопируется автоматически из соединения по умолчанию в классе SQL - SQL::$dd.

В таких моделях можно использовать прототипы глобальных функций sql(..), sqlf(..), qp(..), вызывая их через $this->. В этом случае будет использоваться дежурная таблица и соединение с БД, определенные в модели. Метод ::head_y() всегда вызывается автоматически, во время выполнения конструктора класса. Его рекомендуется использовать (а не конструктор класса), если алгоритмически нужна некоторая инициализация модели.

Из контроллеров и моделей, доступ к другим моделям, осуществляется без использования каких-либо специальных действий. Создание объекта модели, выполняется автоматически при первом вызове, в магическом методе __get(..), далее объект используется как singletone. Редко, но все-же, может потребоваться второй экземпляр объекта модели, в этом случае используйте new:

class m_test extends Model_m
{
    . . .
    function method() {
        # nothing special to access other model, do not required:
        # include file, operator new, dependency injection
        $r = $this->m_other_model->method(); # create instance & run method
        echo $this->m_other_model->public_property; # access same instance
        
        
        # use `new` for second instance
        $second_instance = new m_other_model;
        $r2 = $second_instance->method();
    }
}

T-модели

Такие модели следует использовать, когда необходимо привязать код модели к некоторой конкретной таблице в БД. Имя класса модели следует выбирать в соответствии с именем таблицы с префиксом t_. Например, для таблицы article - класс t_article, файл - main/mvc/t_article.php.

Базовый класс Model_t, в сравнении с Model_m, дополнительно содержит методы, которые можно использовать в T-моделях приложений. В основном это методы-обертки для сокращения кода работы с SQL запросами:

Model_t::where($rule) - для составления кляузы WHERE

Model_t::cell($rule = '', String $what = 'count(1)') - для чтения единственного значения из БД

Model_t::one($rule = null, String $pref = '>') - для чтения одного ряда значений из БД

Model_t::all($rule = '', $what = '*', String $pref = '#') - для чтения всех рядов результата запроса к БД

Model_t::insert(Array $ary) - для вставки ряда данных в БД

Model_t::update($what, $rule = null) - для обновления данных в БД

Model_t::delete($rule = null) - для удаления данных из БД

Во всех методах выше, подразумевается работа с дежурной таблицей модели. Их можно использовать не создавая файл с определением модели, в этом случае, нужно передать имя таблицы в конструкторе класса Model_t:

class m_test extends Model_m
{
    . . .
    function method($table = 'variable_name') {
        $all_rows = (new Model_t($table))->all();
        
        . . .
    }
}

В T-моделях, при вызове методов моделей, также происходит переключение соединения с БД по умолчанию и дежурной таблицы в классе SQL, так что можно использовать глобальные функции sql(..), sqlf(..), qp(..), а не их протоnиты с $this->. И по шаблону $_ будет подразумеваться таблица, определенная как дежурная в текущей модели (и соединение с БД).

Виртуальные X-модели

Модели продуктов, использующие пространства имен, могут быть сохранены в файлах с префиксом x_. Создание экземпляров таких моделей из потомков MVC_BASE также производится с помощью этого префикса, например $this->x_able. Но внутри файла, префикс имени класса модели должен быть m_ или t_. Смотрите определение модели из продукта Upload, файл upload/mvc/x_able.php:

<?php

namespace upload;

class t_able extends \Model_t
{
. . .
}

Префикс x_ сообщает ядру Coresky, что необходимо сделать автозагрузку такой модели и создание её экземпляра класса, которая использует пространство имен. Подразумевается, что имя namespace совпадает с текущим Plan::$ware.

Виртуальные X-модели используются для разрешения возможных коллизий в именах классов PROD-продуктов и моделей кода приложений.

Другие модели

В папке mvc можно также создать модели наследующие, например базовый класс MVC_BASE с произвольным префиксом, например файл y_test.php:

<?php

namespace warename_or_main;

class y_test extends \MVC_BASE
{
    function __construct() {
        # your own code
    }
    . . .
}

В этом случае, создание экземпляра класса будет возможно только с помощью new:

$instance = new \warename_or_main\y_test();

Рассматривается целесообразность создания других базовых классов моделей, например `Model_q` для составления запросов к БД в стиле Query builder.
⚠️ **GitHub.com Fallback** ⚠️