Валидируем архитектуру и производительность без запуска кода Лучшие практики
Замечали ли вы, что public/private/protected недостаточно для инкапсуляции? Хочется описывать более сложные отношения, например: "вот этот метод — он, конечно, public, но он конвертирует id'шники из представления базы в бизнес-логику, поэтому дёргать его только из ORM, окей?". Или — "эта функция вызывается 500 раз на запрос, давайте она не будет вызывать медленное логирование".
У нас в ВК полно таких кейсов в гигантском монолите. Временами кто-то да и отправит в продакшн код, который вызывает базу в цикле из server-side rendering'а — неспециально, так просто получилось, потому что эти вызовы на 10 слоёв вложены и не видны при ревью.
Мы придумали паттерн, чтобы описывать такие отношения. Чем-то похоже на deptrac, но гибче: мы отслеживаем произвольный уровень вложенности (а не только прямые вызовы), мы умеем описывать исключения, плюс мы не используем регулярки по именам классов, а пишем всё в аннотациях. Рантайм-оверхед нулевой, т.к. всё отслеживается во время анализа (в случае KPHP — компиляции). Можно описывать модульность и internal-функции.
Расскажу про концепцию, про аналогию call graph'ов и CSS, про алгоритм реализации на 200к функциях, а также — как попробовать, если понравится.
Внутри ВКонтакте занимается разработкой KPHP и ряда других Open Source-проектов, оптимизацией ядра и работой на стыке PHP – KPHP – движки.