Разумеется все средне-статистические задачи серверной части должны решаться по определенному принципу. Если каждый раз, получая новый проект, мы будем использовать разную архитектуру, то время затраченное на поддержку будет увеличено в разы. И чем старше проект, тем больше усилий будет требовать разбор такого динозавра до уровня "теперь ясно как это работает". Что подразумевается под "средним"? У нас всегда есть база, вывод и 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!
Вопрос, какую архитектуру или иерархию и вы используете?
Мне интересно, кто-нибудь предложит что-то кроме классов?