Package - почти независимый reuse-код, который может быть использован в качестве модуля для проекта.
Package зависим от фреймворка.
Иногда Package может потребовать работы с бд
Предположим Package UserAuth
Вопрос: как передать "пакету" объект базы данных или что-то ещё чтобы он не был зависим от какой-то бд/orm/etc и просто молча сделал свою работу, например сделал
select * from users where login="Ivan" and password="asdu9asjda9sdjasduas9dju9"
Я придумал такой выход:
Раз Package зависим от фреймворка - нужно создать какой-то контейнер с инструментарием в самом фреймворке и передавать его по необходимости в Package.
Например:
DBContainer
в нём - DBContainer/Crud с функциями select/insert/update/delete, не зависимый от специфичной бд
и в нём же драйвера DBContainer/Drivers/* со специфичным интерфейсом, которые использует crud
Показал своё решение в конференции симфони в скайпе, там меня обосрали сказав что я пытаюсь написать Doctrine, и что надо использовать Doctrine и передавать в Package сущности. Но тут есть другие проблемы, которые лично я вижу:
1. Привязанность кода Package и фреймворка в целом к Doctrine
2. А что если мне в проекте не надо ORM? А тупо надо "mysql_query" да-да, и что тогда? Как я буду с этой сущностью работать? Откуда я её возьму то.