diff --git a/AGENTS.md b/AGENTS.md index 9063c82..c4fbfdc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -114,7 +114,7 @@ description: {Описание} ## Расположение *(если применимо)* - Слой (Domain, Application, Infrastructure, Presentation). -- Путь: `{ProjectName}\Common\Module\{ModuleName}\{Layer}\{Context}\{Name}` +- Путь: `{ProjectName}\Common\Module\{ModuleName}\{Layer}\{GroupName?}\{Name}` ## Как используем diff --git a/docs/conventions/core-patterns/helper.md b/docs/conventions/core-patterns/helper.md index 94e5139..0e50cd5 100644 --- a/docs/conventions/core-patterns/helper.md +++ b/docs/conventions/core-patterns/helper.md @@ -53,12 +53,12 @@ description: Правила создания и использования хе **Infrastructure слой** — утилитные методы для инфраструктурных операций: ``` -{ProjectName}\Common\Module\{ModuleName}\Infrastructure\Service\{Context}\Helper\{Name}Helper +{ProjectName}\Common\Module\{ModuleName}\Infrastructure\Service\{GroupName}\Helper\{Name}Helper ``` ## Как используем -- Группирует утилиты одного узкого контекста. +- Группирует утилиты одной узкой группы. - Используется через статический вызов. - В DI не регистрируется. - Хелпер не должен заменять сервисы — если нужна инъекция зависимостей, создавайте сервис. diff --git a/docs/conventions/core-patterns/service.md b/docs/conventions/core-patterns/service.md index e0c5d0b..e0d5306 100644 --- a/docs/conventions/core-patterns/service.md +++ b/docs/conventions/core-patterns/service.md @@ -56,8 +56,8 @@ description: Правила создания и использования се - Интерфейс и реализация в `Domain`: ```php -{ProjectName}\Common\Module\{ModuleName}\Domain\Service\{Context?}\{ServiceName}ServiceInterface -{ProjectName}\Common\Module\{ModuleName}\Domain\Service\{Context?}\{ServiceName}Service +{ProjectName}\Common\Module\{ModuleName}\Domain\Service\{GroupName?}\{ServiceName}ServiceInterface +{ProjectName}\Common\Module\{ModuleName}\Domain\Service\{GroupName?}\{ServiceName}Service ``` ## Как используем @@ -87,13 +87,13 @@ description: Правила создания и использования се - Интерфейс: ```php -{ProjectName}\Common\Module\{ModuleName}\Domain\Service\{Context?}\{ServiceName}ServiceInterface +{ProjectName}\Common\Module\{ModuleName}\Domain\Service\{GroupName?}\{ServiceName}ServiceInterface ``` - Реализация: ```php -{ProjectName}\Common\Module\{ModuleName}\Infrastructure\Service\{Context?}\{ServiceName}Service +{ProjectName}\Common\Module\{ModuleName}\Infrastructure\Service\{GroupName?}\{ServiceName}Service ``` ## Как используем @@ -126,8 +126,8 @@ description: Правила создания и использования се - Интерфейс и реализация в `Application`: ```php -{ProjectName}\Common\Module\{ModuleName}\Application\Service\{Context?}\{ServiceName}ServiceInterface -{ProjectName}\Common\Module\{ModuleName}\Application\Service\{Context?}\{ServiceName}Service +{ProjectName}\Common\Module\{ModuleName}\Application\Service\{GroupName?}\{ServiceName}ServiceInterface +{ProjectName}\Common\Module\{ModuleName}\Application\Service\{GroupName?}\{ServiceName}Service ``` ## Как используем @@ -154,13 +154,13 @@ description: Правила создания и использования се - Интерфейс: ```php -{ProjectName}\Common\Module\{ModuleName}\Domain\Service\{Context?}\{ServiceName}ServiceInterface +{ProjectName}\Common\Module\{ModuleName}\Domain\Service\{GroupName?}\{ServiceName}ServiceInterface ``` - Реализация: ```php -{ProjectName}\Common\Module\{ModuleName}\Integration\Service\{Context?}\{ServiceName}Service +{ProjectName}\Common\Module\{ModuleName}\Integration\Service\{GroupName?}\{ServiceName}Service ``` ## Как используем diff --git a/docs/conventions/layers/application/event.md b/docs/conventions/layers/application/event.md index e197011..a0c04e0 100644 --- a/docs/conventions/layers/application/event.md +++ b/docs/conventions/layers/application/event.md @@ -28,10 +28,10 @@ description: Правила создания и использования до - В слое [Application](../application.md): ```php -{ProjectName}\Common\Module\{ModuleName}\Application\Event\{Context?}\{EventName}Event +{ProjectName}\Common\Module\{ModuleName}\Application\Event\{GroupName?}\{EventName}Event ``` -* `{Context?}` — опционально, используется для группировки по смыслу. +* `{GroupName?}` — опциональная группа событий по смыслу. * `{EventName}` — имя события без суффикса `Event`. ## Когда использовать diff --git a/docs/conventions/layers/domain.md b/docs/conventions/layers/domain.md index 78ea432..13c7cff 100644 --- a/docs/conventions/layers/domain.md +++ b/docs/conventions/layers/domain.md @@ -27,8 +27,6 @@ src/Module/{ModuleName}/Domain/ │ ├── {EntityName}RepositoryInterface.php │ └── Criteria/ ├── Service/ -│ └── Integration/ -│ └── {ServiceName}Interface.php ├── Specification/ │ └── {SpecificationName}.php └── Calculator/ @@ -42,4 +40,3 @@ src/Module/{ModuleName}/Domain/ - [ ] Репозитории — интерфейсы, а не реализации. - [ ] Сущности проверяют инварианты. - [ ] VO неизменяемы и инкапсулируют валидацию. - diff --git a/docs/conventions/layers/domain/criteria.md b/docs/conventions/layers/domain/criteria.md index 0f348f2..46a59f6 100644 --- a/docs/conventions/layers/domain/criteria.md +++ b/docs/conventions/layers/domain/criteria.md @@ -13,8 +13,8 @@ description: Правила создания критериев для филь ## Общие правила -- **Структура:** интерфейс и реализации в `Domain`, имя `{Entity}{Context}Criteria`. -- **Использование:** Репозиторий принимает интерфейс критерия. Один критерий описывает только один контекст выборки. +- **Структура:** интерфейс и реализации в `Domain`, имя `{EntityName}{SearchName}Criteria`. +- **Использование:** Репозиторий принимает интерфейс критерия. Один критерий описывает только один сценарий выборки. - **Ограничения:** без бизнес-логики, только фильтры/пагинация/сортировка. - **Способ задания:** через `set*()` или конструктор, `set*()` всегда `void` и с нормализацией. - Для пагинации и сортировки применяются унифицированные интерфейсы: @@ -37,14 +37,16 @@ description: Правила создания критериев для филь ```php namespace {ProjectName}\Common\Module\{ModuleName}\Domain\Repository\{EntityName}\{EntityName}CriteriaInterface -namespace {ProjectName}\Common\Module\{ModuleName}\Domain\Repository\{EntityName}\Criteria\{CriteriaName}Criteria +namespace {ProjectName}\Common\Module\{ModuleName}\Domain\Repository\{EntityName}\Criteria\{EntityName}{SearchName}Criteria namespace {ProjectName}\Common\Module\{ModuleName}\Domain\Repository\{EntityName}\Enum\{EntityName}SortFieldEnum; // при использовании enum ``` +- `{SearchName}` — сценарий или способ поиска без имени сущности и суффикса `Criteria`, например `Find`, `Active`, `ByStatus`. + - Mapper в слое [Infrastructure](../infrastructure.md): ```php -namespace {ProjectName}\Common\Module\{ModuleName}\Infrastructure\Repository\{EntityName}\Criteria\Mapper\{CriteriaName}CriteriaMapper +namespace {ProjectName}\Common\Module\{ModuleName}\Infrastructure\Repository\{EntityName}\Criteria\Mapper\{EntityName}{SearchName}CriteriaMapper ``` ## Как используем @@ -179,7 +181,7 @@ final class PaymentFindCriteria implements PaymentCriteriaInterface, SortableCri - [ ] Интерфейс критерия лежит в `Domain/Repository/{EntityName}`. - [ ] Реализация находится в `Domain/Repository/{EntityName}/Criteria`. -- [ ] Название соответствует паттерну `{Entity}{Context}Criteria`. +- [ ] Название соответствует паттерну `{EntityName}{SearchName}Criteria`. - [ ] В критерии нет бизнес-логики. - [ ] `set*()` возвращают `void` и нормализуют данные. - [ ] Пагинация/сортировка реализованы через унифицированные интерфейсы/трейты. diff --git a/docs/conventions/layers/domain/entity.md b/docs/conventions/layers/domain/entity.md index 89a4720..18f396d 100644 --- a/docs/conventions/layers/domain/entity.md +++ b/docs/conventions/layers/domain/entity.md @@ -57,7 +57,7 @@ description: Правила проектирования доменных сущ - В слое [Domain](../domain.md): ```php -{ProjectName}\Common\Module\{ModuleName}\Domain\Entity\{Context}\{EntityName}Model +{ProjectName}\Common\Module\{ModuleName}\Domain\Entity\{GroupName?}\{EntityName}Model ``` ## Как используем diff --git a/docs/conventions/layers/domain/specification.md b/docs/conventions/layers/domain/specification.md index 62f683e..ca41724 100644 --- a/docs/conventions/layers/domain/specification.md +++ b/docs/conventions/layers/domain/specification.md @@ -33,10 +33,10 @@ description: Правила использования паттерна Specific - В слое [Domain](../domain.md): ```php -{ProjectName}\Common\Module\{ModuleName}\Domain\Specification\{Context}\{SpecificationName}Specification +{ProjectName}\Common\Module\{ModuleName}\Domain\Specification\{GroupName?}\{SpecificationName}Specification ``` -`{Context}` используется при необходимости логически сгруппировать спецификации внутри модуля. +`{GroupName?}` используется при необходимости логически сгруппировать спецификации внутри модуля. ## Как используем diff --git a/docs/conventions/layers/integration.md b/docs/conventions/layers/integration.md index 2145ee3..04c60c5 100644 --- a/docs/conventions/layers/integration.md +++ b/docs/conventions/layers/integration.md @@ -75,4 +75,3 @@ Integration слой отвечает за межмодульное взаимо - [ ] Middleware адаптирует транспортный контекст, не реализуя бизнес-правила. - [ ] Нет прямых вызовов к Domain/Infrastructure из Listener. - [ ] Межмодульное взаимодействие идёт через Application-контракты. - diff --git a/src/Sniffs/Structure/ServiceStructureSniff.php b/src/Sniffs/Structure/ServiceStructureSniff.php index f5326ef..795d39a 100644 --- a/src/Sniffs/Structure/ServiceStructureSniff.php +++ b/src/Sniffs/Structure/ServiceStructureSniff.php @@ -112,7 +112,7 @@ private function assertServiceInCorrectDirectory( $phpcsFile->addError( sprintf( 'Service class "%s" must be placed in a Service/ directory.' - . ' Move it to .../Service/{Context?}/%s.' . self::DOC_REF, + . ' Move it to .../Service/{GroupName?}/%s.' . self::DOC_REF, $className, $className, ), @@ -139,7 +139,7 @@ private function assertDomainServiceImplInServiceDirectory( sprintf( 'Class "%s" implements Domain Service interface "%s"' . ' but is not in a Service/ directory.' - . ' Move it to .../Service/{Context?}/%s.' . self::DOC_REF, + . ' Move it to .../Service/{GroupName?}/%s.' . self::DOC_REF, $className, $fqcn, $className, diff --git a/tests/fixtures.php b/tests/fixtures.php index de0fe22..eb5712d 100644 --- a/tests/fixtures.php +++ b/tests/fixtures.php @@ -319,7 +319,7 @@ ], 'warnings' => [], ], - // DtoStructureSniff — Domain DTO in Domain/Service/{Context}/ — correct path + // DtoStructureSniff — Domain DTO in Domain/Service/{GroupName}/ — correct path [ 'file' => __DIR__ . '/fixtures/src/Module/Example/Domain/Service/Payment/InitPaymentResultDto.inc', 'errors' => [], diff --git a/tests/fixtures/src/Module/Example/Domain/Dto/WrongPathDto.inc b/tests/fixtures/src/Module/Example/Domain/Dto/WrongPathDto.inc index 0dd9267..5d12933 100644 --- a/tests/fixtures/src/Module/Example/Domain/Dto/WrongPathDto.inc +++ b/tests/fixtures/src/Module/Example/Domain/Dto/WrongPathDto.inc @@ -1,6 +1,6 @@