За последние 24 часа нас посетили 22287 программистов и 1031 робот. Сейчас ищут 649 программистов ...

Архитектура проекта на PHP

Тема в разделе "Решения, алгоритмы", создана пользователем Белояръ, 10 ноя 2019.

Метки:
  1. Белояръ

    Белояръ Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    71
    Симпатии:
    8
    Предисловие

    За всё время работы программистом, я сталкивался с различными задачами по доработке сайтов. И отметил одно: функций много, по разных файлам разбросанно, общей картины пространства имён не видно, где то (например в yii) нужно ещё инициировать проект, чтобы через phpmyadmin увидеть актуальные таблицы... я не говорю уже о контроле созданного проекта, который не централизован вовсе (if,elseif где попало). А перевод на git технологии перевёл код на уровень: построили из того что было под рукой.

    Не желавши такого, совсем, тянувшись к геометрии и балансу, я начал восстанавливать исконный подход к программированию, да так, чтобы можно было легко сдать сайт другому программисту на доработку, со всем необходимым.

    [​IMG]

    Зона абы как

    PHP-коды по методу "ООП на классах" я выявил как некие зависания в каких то (не ясных) этапах разработок. Вы смотрели "Фирма, которая занимается ничем"? Раздрай какой то:

    1. Нет целей проекта и описаний

    2. Неструктурированно пространство имён

    3. Неструктурированны файлы

    4. Уравнивание разных по назначению алгоритмов

    Свобода – это осознанная необходимость

    Я утвердил что мой подход к программированию станет дисциплинированным и свободным. Не легко было, но я справился, и выявил 4-е важных компонента построения проекта (как для ядра, так и для интерфейса), которые полностью соответствовали моему устремлению:

    1. Conditions, где создаются права проекта

    2. Space, где создаются роли проекта

    3. Distribution, где создаются возможности проекта

    4. Realization, где создаются способности проекта

    Зафиксируем эту аббревиатуру как CSDR.

    [​IMG]

    Архитектура

    [​IMG]


    Согласование

    Первое, что нужно учесть: мы создаём проект (ядро или интерфейс). Второе: проект должен быть целостным. Думаю, как и я, вы посчитали эти условия разумными.

    Проектирование

    Далее из этого вытекает, что дальше речь будет о компонентах проекта, а по моим расчётам (и подсказкам таки еврейских братьев) наш мир 4-х-мерный: прошлое (наша опора), будущее (наша среда), объединяющее (таки да, торговля и подарки важны) и настоящее (наши дела). Основавшись на таких знаниях, и признав, что лучшего программирования согласованного с ходом нашего времени не найти, я спроектировал такие имена компонентов для создания проекта: Conditions, Space, Distribution и Realization.

    Сделаю небольшой перевод аббревиатуры CSDR, для дальнейшего удобства изъяснений. Итак:

    1. Conditions, где создаются права проекта -> Рефлексы

    2. Space, где создаются роли проекта -> Места

    3. Distribution, где создаются возможности проекта -> Связи

    4. Realization, где создаются способности проекта -> Реакции

    Объект

    Если перевести на человеческий язык, то рефлексы это цели. В проекте рефлексы решают что нужно делать с $_GET и $POST, например для **$_GET\['page'\]=='forum' and !isset($_GET\['type'\])** нужен рефлекс **Форум**, а когда запрос **$_GET\['page'\]=='forum' and $_GET\['type'\]=='topic'** потребуется подрефлекс **Топик**. При просмотре всех рефлексов мы можем понять, какие внешние запросы проект принимает, по простому: для чего проект существует.

    Места это по факту все namespaces, которые применяются для классов, то есть все названия классов, функций. А так же места вмещают в себя и названия переменных, позволяя хранить информацию.

    Связи это каналы, которыми места объединяются друг с другом, что в свою очередь даёт возможность предоставить реакциям (алгоритмам) все значения (информацию) с необходимых мест, а так же в обратном порядке распределить результат реакции по местам.

    [​IMG]

    Конструирование

    Проект

    Когда же из компонентов начал создавать 4-х-мерный проект, то заметил, что рефлексы и места из за своих особенностей (необходимости вложенности) должны выстраиваться гомоархически (в субъекты), а вот связи и реакции гетерархично (в объекты) по причине завязки на места.

    [​IMG]

    Содержание

    Для каждого компонента так же было выявлено необходимое содержание, дабы каждый компонент смог раскрыть себя полностью и быть применим на любом уровне проекта.

    Для рефлексов:
    1. Ориентир, где идёт обозначение рефлекса
    2. Условия, где код условия ("if")
    3. Расчёты, где идёт описание рефлекса
    4. Места, где перечисляются id мест для активации
    5. Вложение, подкатегории рефлексов


    Для мест:
    1. Смысл, где идёт обозначение места
    2. Роль, где идёт назначение места
    3. Связи, где перечисляются id связей для активации
    4. Вложение, подкатегории мест / значение


    Для связей:
    1. Возможности, где перечисляются id мест (с ролью "Информация") для импорта вложений в реакцию
    2. Приобретение, где перечисляются id мест (с ролью "Информация") для экспорта результата из реакции во вложения
    3. Пример возможностей, для тестирования алгоритма
    4. Пример приобретения, для тестирования алгоритма
    5. Реакция, где перечисляются id реакций для активации


    Для реакций:
    1. Способность, где алгоритм

    Взаимосвязь

    Далее я связал компоненты в взаимную последовательную активацию:

    1. Реакции активируют рефлексы
    2. Рефлексы активируют места
    3. Места активируют связи
    4. Связи активируют реакции
    и т.д. с самого начала, до тех пор пока есть не активированные рефлексы.

    [​IMG]


    Пример

    И вот, всё необходимое для реализации учтёно. Приступим.

    Установим цель примера, например такую: на внешний запрос "x" и "y" выдать результат "z", рассчитанный по формуле x + y = z.

    Произведём планировку (стрелками обозначим влияние / активацию):

    [​IMG]

    И реализуем такой вот код: Пример.
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Ваши никнейм, аватар и методология написания кода в приведённом примере, пребывают в идеальной гармонии.
     
    Белояръ нравится это.
  3. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    PHP:
    1. /*обходим все рефлексы*/
    2. foreach ($goals_row as $goal_id => $goal_row){
    3.    /*если условия рефлекса выполнимы*/
    4.    if(eval('return ' . $goal_row['Условия'] . ';') == true){
    5.      /*если есть места у рефлекса*/
    6.      if($goal_row['Места']){
    7.        /*обходим все места рефлекса*/
    8.        foreach($goal_row['Места'] as $place_id){
    9.          /*если есть связи у места*/
    10.          if(($communications = $function_link_place_by_id($place_id)['Связи'])){
    11.            /*обходим все связи места*/
    12.            foreach($communications as $communication_id){
    13.              /*если есть реакции у связи*/
    14.              if($GLOBALS['Связи'][$communication_id]['Реакция']){
    15.                /*обходим реакции связи*/
    16.                foreach($GLOBALS['Связи'][$communication_id]['Реакция'] as $reaction_id){
    17.                  /*обрабатываем возможности*/
    18.                  $places_data_in = [];
    19.                  if($GLOBALS['Связи'][$communication_id]['Возможности'] != null){
    20.                    foreach($GLOBALS['Связи'][$communication_id]['Возможности'] as $place_id){
    21.                      $places_data_in[$place_id] = &$function_link_place_by_id($place_id)['Вложение'];
    22.                    }
    в коде сплошная гармония
     
    Белояръ нравится это.
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.319
    Адрес:
    Лень
    Думать бело.
    Кодить грязно.
     
    Белояръ нравится это.
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    OMG, господин Белояръ популяризирует свой восхитительно сбалансированный подход по всем интернетам
    https://bit.ly/2X0MBej - вероятно в 9/10 случаев его уже стёрли, но что-то останется навеки.
     
    Белояръ нравится это.
  6. Белояръ

    Белояръ Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    71
    Симпатии:
    8
    Пипец))) Я полюбил ваш форум.))) Best the best.))))

    > вероятно в 9/10 случаев уже стёрли

    Неее, только обпукали немного, на хабре, но то свои, прощаемо.))) На большее уже и нет ресурсов то, и не будет...)))))
     
  7. Vladchucha

    Vladchucha Активный пользователь

    С нами с:
    12 ноя 2018
    Сообщения:
    167
    Симпатии:
    7
    Адрес:
    Nürnberg
    Это особый склад ума плюс талант в области языкознания и профессиональной терминологии
    Реакции активируют рефлексы
    Рефлексы активируют места
    Места активируют связи

    !!!!!!!!!!!!!!!
     
    Белояръ нравится это.
  8. Белояръ

    Белояръ Новичок

    С нами с:
    10 ноя 2019
    Сообщения:
    71
    Симпатии:
    8
    Спасибо, брал из жизни:

    1. Здоровье активирует счастье
    2. Счастье активирует удачу
    3. Удача активирует благополучие
    4. Благополучие активирует здоровье
    и т.д. с самого начала.))))))))))
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.319
    Адрес:
    Лень
    В итоге активировал банан