Группировка по модулям

Я придерживаюсь строгого принципа: весь используемый вместе код должен находиться как можно ближе друг к другу.

Поэтому в своих проектах всегда группирую код по модулям и отказываюсь от “общих” папок где код сгруппирован “по типу”, таких как 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>

Профит

В чём же польза?

Только в том, что вам больше не нужно параллельно держать несколько деревьев с папками открытыми, когда вы работаете по конкретному модулю.

Вы открываете папку с модулем и работаете только с ней. Модели, тесты, сервисы, в ней есть всё.

Это очень сильно повышает фокусировку на задаче.