Так я начал разрабатывать свой подход к программированию сайтов, так, чтобы можно было легко сдать сайт другому программисту на доработку, со всем необходимым.
Мой путь
Я утвердил что мой подход станет естественным и свободным. Не легко было, но я справился, и выявил 4-е важных компонентов построения сайта, которые успешно прижились.
Четыре важных компонентов построения сайта
- Conditions
- Space
- Distribution
- Realization
Этот подход основательно выявил текущий принятый ООП в php как беспорядочную муть.
В чём фишка текущего ООП? Да, распиаренный Родитель-сын. А какие цели стояли для ООП? Разве необходимость разместить готовые алгоритмы по разным файлам в виде class? Не думаю, это усугубляет только. Разве стояла цель создать семейственность? Не думаю, уже создав 4-е класса можно запутать кто чей папа.
Проблемы текущего ООП на php
- Огрызки пространства имён
- Много файлов
- Допускается вариант «повтор-функции»
Простите, но это критические ошибки, мешающие работе проектировщика. А team-lead чем хвастается перед директором? Функциями? Что то тут неправильно.
ООП посредством компонентов CSDR
1. Conditions
Создания сайтов начинаются с головы. А это цели. Мы конечно же уже профи, и понимаем, что прежде чем начать выполнять цели — нужно взять 30% предоплаты. Шучу. Конечно же нужно провести все необходимые расчёты, дабы проект в итоге был сбалансированным, и соответствовал всем требованиям построения сайта, и целям тоже.
Цель: ООП посредством CSDR на примере мини-офиса
Требования к основе: - Три роли: директор (1 человек), секретарь (1 человек), программисты (2 человека) - Директор умеет: ставить задачи (2 задачи), анализировать отчёт, хвалить программиста ...
Результат работы должен вывести на экран такой шаблон текста: {дата-время} Директор постановил задачу: {задача} {дата-время} Программист {инициалы} создал код: {код} ...
2. Space
Требования утверждены. Начинаем проектировать. Вот тут дамы и господа, и те, кто против диктаторства: начинается создание пространства имён. Неожиданно, да? Да. Берём и начинаем создавать массив имён мест (это те самые имена, которыми вы называете классы и функции), с построением иерархии (вложенности). Есть важный момент космос-построения, нужно так же писать и суть места, описывать для чего предназначены места. Не переживайте, внизу будет наглядный пример. Кстати, пространства имён должны быть не только мест, но и переменных, а так же и таблиц базы данных. Да-да. Эти места создаются заблаговременно, творцы. 🙂
$GLOBALS['Пространство мест'] = [ 'п.м. 1' => [ 'Название' => 'Директор', 'Смысл' => 'Место директора', 'п.м. 1.1' => [ 'Название' => 'Постановка задачи', 'п.м. 1.1.1' => [ 'Название' => 'Легкая', 'Смысл' => 'Место, где директор может постановить программисту легкую задачу', ], 'п.м. 1.1.2' => [ 'Название' => 'Трудная', 'Смысл' => 'Место, где директор может постановить программисту трудную задачу', ], ], ...
$GLOBALS['Пространство переменных'] = [ 'п.п. 1' => [ 'Название' => 'Работа', 'Смысл' => 'Переменная, где идут рабочие процессы', 'п.п. 1.1' => [ 'Название' => 'Задача', 'Смысл' => 'Переменная, где содержится задача для программистов', ], ...
3. Distribution
Пространство создано. Начинаем распределять. Слышали, что раньше окно и двери вырубали в цельной деревянной стене? Вот, здесь так же: пространство это стены, а распределение это уже двери. Создаём массив, где для каждого места будет свои входящие переменные, и выходящие переменные. Стоп. Если вы не сбалансировали проект, идите ка вы на пункт номер один. А коли сбалансировали, то вы конечно же уже знаете, что нужно кому дать, а у кого чего взять. Так и указываете в массиве, а так же допишите какой толк с этого. Выгода должна быть объявлена, однако. 🙂
$GLOBALS['Элементы'] = [ 'э. 1' => [ 'Пространство места' => 'п.м. 1.1.1', 'Толк' => 'Директор даст лёгкую задачу', 'Входящие переменные' => [ ], 'Выходящие переменные' => [ 'п.п. 1.1', ], ], ...
4. Realization
Элементы (палка о двух концах) образованы. Теперь дело за алгоритмами. Да, я не ошибся, именно алгоритмами, а не функциями. Берём и пишем одну функцию run_the_algorithm, а внутри через условия «if-elseif» дописываем все алгоритмы. Вот так вот.
function run_the_algorithm($parameters = ['Элемент' => null, 'Входящие переменные' => null]){ $e = $parameters['Элемент']; $p = $parameters['Входящие переменные']; /*Действие: директор постановляет лёгкую задачу*/ if($e == 'э. 1'){ return [ 'п.п. 1.1' => 'Создай скрипт' ]; } ...
5. Conditions
Да, это не конец. Систематизируем новые действия в итоговые сведения.
Готовые алгоритмы: 1) Директор постановляет лёгкую задачу: run_the_algorithm(['Элемент' => 'э. 1', 'Входящие переменные' => null]) ...
Только после этого допустимо внедрение алгоритмов в рабочий процесс.
foreach(['э. 1', 'э. 2'] as $p){ $r = run_the_algorithm(['Элемент' => $p, 'Входящие переменные' => null]); $t = $r['п.п. 1.1']; run_the_algorithm(['Элемент' => 'э. 10', 'Входящие переменные' => ['п.п. 3' => 'Директор постановил задачу: ' . $t]]); foreach(['э. 6', 'э. 7'] as $pr){ ...
Такой подход намного упрощает жизнь. Система становится наглядной, взаимозависимой и распределенной… легко видно где именно допущена любая ошибка, которую можно уже назвать одним словом: «пренебрежение». Зараза ещё та. 🙂
Ну собственно и полный пример.
Хорошая архитектура — это дорого. Плохая — еще дороже.
ссылка на оригинал статьи https://habr.com/ru/post/460575/