Вопрос или проблема
Я хочу использовать библиотеку PHP Deptrac с многослойной архитектурой (Приложение, Сфера, Инфраструктура) и одновременно с модулями. Структура проекта такая: src/<имя_модуля>/<слой>/**
. Я хочу ограничить взаимодействие между модулями только через слой Инфраструктуры. Возможно ли это настроить с помощью Deptrac? Если нет, есть ли другая библиотека, которая могла бы помочь с этим?
Ответ или решение
Да, конфигурация PHP Deptrac для ограничения модулярной коммуникации в многоуровневой архитектуре возможна. Вам нужно правильно настроить ваши зависимости и правила для того, чтобы они соответствовали требуемой архитектуре. Ниже я опишу шаги, которые позволят вам добиться желаемого результата.
Шаг 1: Установка Deptrac
Если вы еще не установили Deptrac, вы можете сделать это через Composer. Выполните команду:
composer require --dev qossmic/deptrac
Шаг 2: Структура проекта
Убедитесь, что ваша структура проекта соответствует следующему шаблону:
src/
|-- ModuleA/
| |-- Application/
| |-- Domain/
| |-- Infrastructure/
|-- ModuleB/
| |-- Application/
| |-- Domain/
| |-- Infrastructure/
Шаг 3: Настройка конфигурации Deptrac
Создайте файл конфигурации deptrac.yaml
в корне вашего проекта и заполните его следующим образом:
paths:
- 'src/'
layers:
application:
- '**/Application/**'
domain:
- '**/Domain/**'
infrastructure:
- '**/Infrastructure/**'
# Ограничиваем зависимости только через слой инфраструктуры
rules:
- { name: 'Module to Module Communication', from: 'ModuleA/Infrastructure', to: 'ModuleB/Infrastructure' }
- { name: 'Module to Module Communication', from: 'ModuleB/Infrastructure', to: 'ModuleA/Infrastructure' }
# Вы можете добавить другие правила для ограничения доступа между модулями
- { name: 'Application to Domain', from: '**/Application/**', to: '**/Domain/**' }
- { name: 'Domain to Infrastructure', from: '**/Domain/**', to: '**/Infrastructure/**' }
# Это будет предотвращать прямые зависимости между модулями через другие слои
- { name: 'Prevent Module to Module Communication', from: '**/ModuleA/**', to: '**/ModuleB/**' }
- { name: 'Prevent Module to Module Communication', from: '**/ModuleB/**', to: '**/ModuleA/**' }
Шаг 4: Запуск Deptrac
После того как вы создали конфигурационный файл, вы можете запустить анализ с помощью следующей команды:
vendor/bin/deptrac analyze
Шаг 5: Анализ результатов
Deptrac создаст отчет, в котором будут указаны все зависимости, которые соответствуют заданным вами правилам. Если ваше правило о запрете модульным коммуникациям не было соблюдено, вы получите уведомление об этом в отчете.
Дополнительные советы
- Вы можете адаптировать правила в зависимости от потребностей вашего проекта.
- Если Deptrac не отвечает всем вашим требованиям, рассмотрите возможность использования других инструментов, таких как PHPStan или Psalm, которые также могут помочь в анализа архитектуры вашего кода.
С помощью этих шагов вы сможете ограничить межмодульное взаимодействие в своей системе, сохранив четкую организацию кода и соблюдая принципы чистой архитектуры.