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

Файлы Coresky

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

Файл Строк,
размер
Функций,
классов
Описание
boot.php 198
7.5 kB
0, 1 класс генерации главного кэш-файла Coresky - sky_plan.php, который используется всегда
console.php 456
16.9 kB
0, 1 класс для использования в консольных скриптах. Используется скриптом sky. Этот класс умеет расширять список команд Coresky, консольными командами приложений и продуктов
core.php 583
18.9 kB
33, 5 код ядра Coresky. Загружается всегда, вместе с классами SKY и HEAVEN
css.php 184
6.2 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 134
3.3 kB
0, 1 драйвер для Oracle
dd_odbc.php 134
3.3 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 315
12 kB
0, 1 вспомогательный код для режима debug
dev.php 499
19 kB
0, 1 основной код инструмента разработки, только DEV
dev_c.php 429
15.8 kB
0, 1 контроллер web-инструмента разработки, только DEV
form.php 550
21.2 kB
0, 2 функционал для создания Coresky форм
gate.php 504
20.2 kB
0, 1 компилятор SkyGate для контроллеров
globals.php 531
20 kB
0, 1 функционал для поиска определений кода Coresky и кода приложений. Используется в "Global Reports"
install.php 342
13.1 kB
0, 1 функционал для задач, связанных с установкой приложений. Используется только на DEV, в утилите "Open SkyProject"
jet.php 555
21.2 kB
0, 1 компилятор представлений Jet
js.php 129
4.5 kB
0, 1 парсер Javascript
language.php 592
23 kB
0, 1 класс для организации мультиязычных приложений Coresky. Используется только на DEV
md.php 350
12.7 kB
0, 1 парсер Markdown (follow CommonMark)
mvc.php 546
18.3 kB
1, 8 основные классы для организации MVC паттерна Coresky. Используется всегда при обработке web-запросов
php.php 439
17.4 kB
0, 1 парсер PHP
plan.php 529
22 kB
2, 2 класс для реализации системы планов и продуктов Coresky. Загружается всегда, вместе с классами SKY и HEAVEN. Использует драйверы с префиксом dc_
rare.php 365
14 kB
0, 1 здесь содержится функционал, который используется редко, но нужен всегда, например, Rare::login(..)
rewrite.php 249
8.3 kB
0, 1 функционал для настройки Coresky rewrite, только DEV
root.php 517
24.8 kB
0, 1 функционал для диагностики и управления ядром Coresky. Используется в инструментах разработчика на DEV. Также может использоваться в root-админ разделе или на специальных страницах приложения на продакшн
saw.php 268
10.2 kB
0, 1 трейт "Пила", используется в классе Jet. Читайте статью о парсерах Coresky
schedule.php 246
8.4 kB
0, 1 класс для организации консольных cron скриптов. Задачи могут выполняться в параллельных отдельных процессах. Реализуется с помощью функции PHP popen(..)
show.php 553
23.1 kB
0, 1 функционал для отображения разных типов данных
sql.php 469
16.7 kB
0, 3 стандартные классы для работы с реляционными базами данных. Используют драйверы с префиксом dd_
svg.php 21
631 Bytes
0, 1 класс для работы с SVG
user.php 221
8.4 kB
0, 1 базовый класс USER, для организации сессий и аккаунтов пользователей. Может быть заменен или расширен кодом приложения
vendor.php 165
6.4 kB
0, 1 класс для работы пакетами Composer, только DEV
wares.php 28
621 Bytes
0, 1 класс, наследуемый классами-инсталляторами продуктов, только DEV
xml.php 419
14.7 kB
0, 1 класс XML для работы с xml и html данными
yml.php 593
22.8 kB
1, 1 парсер Coresky Yaml
zml.php 79
2.4 kB
0, 1 класс поддержки ZML формата
_data.yaml 210
8 kB
0, 0 Yaml данные: конфигурации и другие данные парсеров, определения форм для класса Root и т.д.
_helper.yaml 165
7.2 kB
0, 0 вспомогательный код для _nice_php.yaml
_nice_php.yaml 482
16.2 kB
0, 0 код для "Пилы" (Coresky SAW) для генерации кода второго этапа бьютифаера PHP
__dev.jet 472
14.8 kB
template layout-шаблон, а также прочие шаблоны инструментов разработки, включая страницы "Main" и "Browse All Wares", только DEV
__glob.jet 410
14.1 kB
template шаблоны для страницы "Global Reports", только DEV
__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: 49 файлов. Другой основной код Coresky, смотрите в следующей таблице:

Файл Строк,
размер
Описание
sky.php 567
22.2 kB
код первого крыла, классы SKY и HEAVEN
sky 83
2.3 kB
скрипт для выполнения команд в консоли. Рекомендуется прописать к нему путь в переменной окружения PATH
etc/moon.php 825
33.7 kB
standalone инсталлятор sky-приложений, упакованных в файл с расширением *.sky
assets/database.yaml 191
145.6 kB
база данных Yaml: содержит некоторые изображения, часовые пояса, языки планеты Земля (ISO 639-1), группированные токены PHP и т.д. Другие файлы Yaml, могут включать этот файл в магическом маркере и использовать данные БД как свои: @inc(.timezones)
assets/dev.css 372
6.7 kB
стили для инструментов разработчика, только DEV
assets/dev.js 381
14.3 kB
javascript код для инструментов разработчика, только DEV
assets/sky.css 171
3.4 kB
стили для всех sky-приложений, работающих с web-интерфейсом. 2do: remove in the future
assets/sky.js 289
9.7 kB
javascript код для всех sky-приложений, работающих с web-интерфейсом. В файле определены функции и методы для реализации действий контроллеров с префиксом j_*, код для валидации Coresky форм, а также другой важный код

Итого Coresky это: 57 файлов, 19091 строк кода, 835.1 kBytes. В глобальной области видимости: 40 именованных функций PHP, 58 классов 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** ⚠️