После проведения многих собеседований, я словил себя на мысли, что среди разработчиков есть определенное количество людей, которые "стартанули" сразу с фреймворков. Они пишут свой код, даже не задумываясь о том, что там, под капотом. Как работает DI, как написать SQL запрос на получение определенных агрегирующих значений, для них это просто магия какого-либо фреймворка. Да, инкапсуляция - это очень круто, позволяет не задумываться, что же там внутри.
Но всё-таки на мой взгляд, хороший разработчик должен уметь навелосипедить свой DI контейнер, или слой работы с БД.
А с этим нам поможет разобраться вот эта статья:
https://telegra.ph/Sovremennyj-PHP-bez-frejmvorkov-10-08