Здравствуйте! Расскажите каким образом вы структурируете файлы в проектах на Yii?
У меня есть не очень большой проект в котором папка с компонентами уже разрослась до 50 файлов и все говорит, что их будет еще больше. Например, есть такие вещи как Model, ModelQuery, ModelRepository, ModelFactory, ModelRepositoryInterface и ModelFactoryInterface. Куда это все хозяйство раскладывать? Сейчас у меня Model лежит в папке models, все остальное в components. А есть еще куча адаптеров для сторонних библиотек и сервисов работающих сами по себе.
Часть функционала иногда получается упаковывать в модули, если он отвечает за конкретный аспект деятельности сайта (например, процесс заказа и все соответствующие компоненты, хелперы, формы, виджеты, контроллеры и ассеты).
Часть можно выделять в отдельные библиотеки и подключать их потом через composer. Но все равно остается куча общего кода, который просто сваливается в папку с компонентами.
Сталкивались ли вы с подобной проблемой? Считаете ли вы это проблемой? Как решаете?
upd// в общем, не считая модулей и библиотек, файлы в проекте можно компоновать всего по двум категориям: по фичам и по типам. сами разработчики yii2 делят свой фреймворк по фичам (web, console, base, mail), но базовое приложение организовано по типам (models, controllers, components). отсюда и косяк: вроде бы фич реализовано много, типов объектов используется тоже много, но на отдельные модули или пакеты composer они в отдельности не тянут. для себя решил разделить папку с компонентами по фичам и туда уже раскидать все разнообразие классов. А корень проекта оставить стандартным с разделением по типам.
Хурма): а вы с какой целью? Наверное нет. Обычный basic шаблон с окружениями из advanced. Штук 20 разных моделей. Просто стремление писать тестируемый код привело к появлению кучи отдельных компонентов с изолированной ответственностью которые нужно как-то раскидать по папкам понятным образом.
Я бы группировал по типу, внутри типа по области применения
- app/models/user
- app/models/order
- app/models/...
- app/factories
- app/repositories
- app/...
- runtime
- modules
- vendors
Ну.. есть три проблемы: как назвать переменную, как инвалидировать кеш и по какому принципу группировать файлы по папкам и неймспейсам.
Если разделять по типу, тогда нужно выделять какие-нибудь models, factories, respositories и т.д. но тут же в корне будет валяеться папка runtime и modules, которые к типам не относятся.
Если разделять по области применения тогда будут какие-нибудь user, profile, order и тут же будут component, models который опять же испортят гармонию.