admin wrote: Fri Mar 26, 2021 6:39 am
как называется паттерн в програмировании который умеет так делать?
ну здесь не паттерн, точнее набор паттернов мог бы помочь в самом начале при проектировании архитектуры смарта (или полном рефакторинге этой и затрагивающихся частей), а сейчас - это всё-равно переписывать всё.
здесь скорее
рефлексия (
более простые варианты) + знание как устроен смарт на уровне сырцов, что есть только у вас

но как бы я лично делал:
все макросы лежат только в одной директории (macroses) каждый макрос - отдельная директория с главным файлом-загрузчиком этого макроса (например по имени это макроса: macroses/thumb/thumb.php), вложенной папкой с поддерживаемым им параметрами (macroses/thumb/params/num.php, macroses/thumb/params/order.php) и прочими расширениями.
при старте ядро смарта сканит директорию макросов, загружает главный файл каждого макроса, который в свою очередь загружает свои параметры (он знает как их создавать и инициализировать).
так же, каждый макрос наследует от некоего абстрактного класса для всех макросов, который собсна:
- реализует все эти загрузки, проверки, инициализации, а конкретные инстансы отдельных макросов уже переопределяют для себя что-либо
- композицию функционала макроса общими параметрами (например order, sort etc - вполне себе общие параметры, значения для которых будут передаваться в конкретных унаследованных классах)
в свою очередь каждый класс параметра - от своего абстракного ParameterBase, где реализуются базовые операции для каждого конкретного параметра.
т.е. на данном этапе получается следующая композиция паттернов:
- Abstract Factory (мы создаём семейство объектов которыми являются макросы)
- Factory Method (это набор конкретных абстрактых методов загрузок/создания параметров макросов и их переопределение)
- Builder (та часть, которая строить составной объект являющийся собранным макросом и возвращает обратно в ядро)
- Singleton (скорее-всего как статические билдеры которые достаются из Repository/Service Locator)
- Iterator (наверное для абстракции при навигации по конструируемым макросам как по колекции)
- Composite (все объекты макросов - это компосайты из объектов параметров)
- Flyweight (если компосайты-макросы будут синглтонами, что в принципе оправдано, и будут выносить свой State для каждого разного инстанса, где встерчаются)
- Chain of Responsibility, где каждый Filter это Strategy + Command + Decorator или (это именно выполнение каждого макроса с последующей передачей результата по цепочке параметров макроса) а так же Pre & Post действия позволяющие как-то дополнительно обрабатывать результат работы каждого макроса
ну блин и наверное большенство из остальных GoF, P of EAA и т.д.

здесь вообще всё от выбираемой стратегии реализации меняющейся на каждой новой итерации зависеть будет.
но в общем разнесение по директориям этого всего просто даёт возможность сразу получить список всего что есть "на борту" просто просканив папку с макросами (это без выделения документации там из комментов сразу в wiki и т.д.)
---
так же можно шифтнуться в сторону Event-Driver архитектуры, типа как в WP, а именно - концепция actions & filters
---
но ясен, это менять всё, а ради просто получения списка всех макросов с поддерживаемыми ими параметрами после очередного апдейда - так замарачиваться, разумеется лишнее, так что проехали
