Группировка по модулям
Я придерживаюсь строгого принципа: весь используемый вместе код должен находиться как можно ближе друг к другу.
Поэтому в своих проектах всегда группирую код по модулям и отказываюсь от “общих” папок где код сгруппирован “по типу”, таких как app/controllers
, app/models
и так далее.
Вместо этого, в моих проектах код сгруппирован по модулям, отвечающим за определённую часть проекта.
При этом внутри самого модуля могут существовать папки models
, controllers
, views
, это нисколько не мешает.
Отдельная папка tests
С тестами всё сложнее.
Благодаря традициям, укоренившимся из-за упрощённых готовых шаблонов приложений, все тесты обычно складывают в папку tests
в корне проекта.
Потом внутри папки tests
начинается деление, дублирующее деление в самом проекте и в итоге рождается два дерева папок, между которыми нужно прыгать если одновременно пишешь тесты и правишь код.
Это просто неудобно.
Перемещаем тесты внутрь модуля
Не все знают, что перенести тесты внутрь модуля очень просто.
Добавляем такую секцию в phpnuit.xml
— на примере приложения на Laravel.
Заметим, что секции testsuite
для Unit
и Feature
я удалил, так как при выносе тестов в модули они уже не нужны.
<testsuites>
<testsuite name="Modules">
<directory suffix="Test.php">./app/Module/*/Tests</directory>
</testsuite>
</testsuites>
Профит
В чём же польза?
Только в том, что вам больше не нужно параллельно держать несколько деревьев с папками открытыми, когда вы работаете по конкретному модулю.
Вы открываете папку с модулем и работаете только с ней. Модели, тесты, сервисы, в ней есть всё.
Это очень сильно повышает фокусировку на задаче.