Aroused
@Aroused

Какие есть архитектуры приложений PHP?

Разумеется все средне-статистические задачи серверной части должны решаться по определенному принципу. Если каждый раз, получая новый проект, мы будем использовать разную архитектуру, то время затраченное на поддержку будет увеличено в разы. И чем старше проект, тем больше усилий будет требовать разбор такого динозавра до уровня "теперь ясно как это работает". Что подразумевается под "средним"? У нас всегда есть база, вывод и api который связывает два первых элемента логикой. Как мы сложную задачу разбиваем на маленькие, которые легко решить, так же эти элементы необходимо отделить друг от друга (3 задачи). Дальше к примеру возьмем базу, ее тоже нужно разделить на различные запросы и хранение ответа (3 задачи). Соседний элемент, который отвечает за отображение информации мы тоже разберем на различные методы представления данных пользователю, обработка данных для вывода и сам вывод (2 задачи). Потом, логика должна быть разбита на всякую маршрутизацию, управление запросами к бд, управление выводом html (3 задачи).
Так вот, эти «задачи» (количество которых я привел может быть любое) мы должны как-то представить в виде какой-то сущности, под сущностью должна подразумеваться какая-то минимальная единица с которой мы начинаем разработку.
Отдельно было обсуждение по поводу способа упаковки всех методов (которые я и принял за минимальную единицу) в многомерный объект по типу $core->base->query->product() или $core->cart->get->price(), но столкнулся с непониманием, зачем это все нужно, когда есть классы и наследования.
Что меня беспокоит в классах и наследовании? В первую очередь многословный синтаксис, далее взглянув на вызов метода этого объекта, что бы понять от кого он унаследован и что умеет нужно найти родителя (если его имя конечно не описывает всех его родителей, что для меня субъективно убого), и так выше по цепочке.
К чему я пришел в ходе предыдущего обсуждения, так это вот к таким объектам:
Тут понятно, куда и какой метод присваивается. При вызове будет то же самое. DICT это пустой класс, который позволяет присваивать методы «на лету».
$animal = new DICT;
	$animal->cat = new DICT;
	$animal->dog = new DICT;
	$animal->cat->say = function($word){ echo 'The cat is said: '. $word; };
	$animal->dog->say = function($word){ echo 'The cat is said: '. $word; };

	$animal->cat->say('meow!');
	// The cat is said: meow!

Вопрос, какую архитектуру или иерархию и вы используете?
Мне интересно, кто-нибудь предложит что-то кроме классов?
  • Вопрос задан
  • 243 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Как мы сложную задачу разбиваем на маленькие, которые легко решить, так же эти элементы необходимо отделить друг от друга
Для этого используются пространства имён.
Использование god object, который знает всё обо всех - антипаттерн. А если ещё и реализовывать его через магические костыли, передирая парадигмы из другого языка, никто вам спасибо не скажет.

Просто подумайте, почему у корзины и запроса к БД общий родитель? Если вы хотите использовать какую-то группировку, сделайте её при помощи пространства имён, IoC-контейнера. Вы зачем-то хотите изнасиловать ООП, вместо того, чтобы понять его.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы