搜索

PythonReactSEOPDF
GitHub Skill

detect-architecture-pattern

Detects architectural patterns (MVC, DDD, Hexagonal, CQRS, Layered, Event Sourcing, Microservice) from namespace structure, interface placement, and dependency direction. Outputs confidence score per pattern.

dykyi-roman☆ 39 仓库 Stars5 仓库 Forks

安装与使用

请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。

查看来源 ↗使用指南

技能说明

Architecture Pattern Detector

Overview

Analyzes a PHP codebase to detect which architectural patterns are in use. Examines namespace structure, interface placement, dependency direction, and code organization to determine patterns with confidence scores.

Detectable Patterns

Pattern Key Indicators Confidence Markers
MVC Controllers + Models + Views Framework routing, template engine
DDD Domain layer with Entities/VOs/Aggregates Repository interfaces in Domain
Hexagonal Ports (interfaces) + Adapters Inbound/outbound port separation
CQRS Separate Command/Query models CommandBus, QueryBus, separate handlers
Layered Domain/Application/Infrastructure Clear namespace separation
Event Sourcing Event store, aggregate replay EventStore, AggregateRoot::apply()
Clean Architecture Use Cases + Entity + Gateway Dependency inversion at boundaries
Microservice Independent deployable Own database, API gateway, docker

Detection Algorithms

MVC Detection
# Controllers
Grep: "class.*Controller" --glob "**/*.php"
Grep: "extends.*Controller" --glob "**/*.php"

# Models (Eloquent/Doctrine entities)
Grep: "extends Model|#\\[ORM\\\\Entity" --glob "**/*.php"

# Views/Templates
Glob: "**/*.twig"
Glob: "**/*.blade.php"
Glob: "resources/views/**"
Glob: "templates/**"

Confidence scoring:

  • Controllers found: +30
  • Models found: +30
  • Views/templates found: +20
  • Framework routing: +20
DDD Detection
# Domain entities
Grep: "namespace.*\\\\Domain\\\\.*\\\\Entity" --glob "**/*.php"
Grep: "namespace.*\\\\Domain\\\\.*\\\\Model" --glob "**/*.php"

# Value Objects
Grep: "class.*ValueObject|ValueObject|readonly.*class" --glob "**/Domain/**/*.php"
Glob: "**/ValueObject/**/*.php"
Glob: "**/Domain/**/ValueObject/*.php"

# Aggregates
Grep: "AggregateRoot|Aggregate" --glob "**/Domain/**/*.php"

# Domain Events
Grep: "DomainEvent|extends.*Event" --glob "**/Domain/**/*.php"
Glob: "**/Domain/**/Event/*.php"

# Repository interfaces in Domain
Grep: "interface.*Repository" --glob "**/Domain/**/*.php"

# Domain Services
Glob: "**/Domain/**/Service/*.php"

Confidence scoring:

  • Domain namespace exists: +15
  • Entities in Domain: +15
  • Value Objects found: +15
  • Repository interfaces in Domain: +20
  • Aggregates found: +15
  • Domain Events found: +10
  • Domain Services found: +10
Hexagonal Detection
# Port interfaces
Grep: "namespace.*\\\\Port\\\\" --glob "**/*.php"
Grep: "namespace.*\\\\Ports\\\\" --glob "**/*.php"
Glob: "**/Port/**/*.php"

# Adapter implementations
Grep: "namespace.*\\\\Adapter\\\\" --glob "**/*.php"
Glob: "**/Adapter/**/*.php"

# Inbound/Outbound separation
Glob: "**/Port/Inbound/**"
Glob: "**/Port/Outbound/**"
Glob: "**/Port/In/**"
Glob: "**/Port/Out/**"

# Use case interfaces (driving ports)
Grep: "interface.*UseCase|interface.*Port" --glob "**/*.php"

Confidence scoring:

  • Port namespace exists: +30
  • Adapter namespace exists: +25
  • Inbound/Outbound separation: +25
  • Use case interfaces: +20
CQRS Detection
# Command/Query separation
Glob: "**/Command/**/*.php"
Glob: "**/Query/**/*.php"

# Command handlers
Grep: "CommandHandler|implements.*CommandHandler" --glob "**/*.php"
Grep: "#\\[AsMessageHandler\\]" --glob "**/Command/**/*.php"

# Query handlers
Grep: "QueryHandler|implements.*QueryHandler" --glob "**/*.php"

# Command/Query bus
Grep: "CommandBus|QueryBus|MessageBus" --glob "**/*.php"

# Separate read models
Grep: "ReadModel|Projection|View" --glob "**/*.php"
Glob: "**/ReadModel/**/*.php"
Glob: "**/Projection/**/*.php"

Confidence scoring:

  • Command namespace: +20
  • Query namespace: +20
  • Command handlers: +15
  • Query handlers: +15
  • Bus implementation: +15
  • Read models: +15
Event Sourcing Detection
# Event store
Grep: "EventStore|EventStream" --glob "**/*.php"

# Aggregate with apply/record
Grep: "->apply\(|->recordThat\(|->record\(" --glob "**/*.php"
Grep: "function apply.*Event" --glob "**/*.php"

# Event replay
Grep: "reconstitute|reconstruct|replay" --glob "**/*.php"

# Projections
Grep: "Projector|Projection|ReadModelProjector" --glob "**/*.php"
Glob: "**/Projection/**/*.php"

# Snapshots
Grep: "Snapshot|SnapshotStore" --glob "**/*.php"

Confidence scoring:

  • EventStore found: +30
  • Aggregate apply pattern: +25
  • Reconstitute/replay: +20
  • Projections: +15
  • Snapshots: +10
Layered Architecture Detection
# Standard layers
Glob: "src/Domain/"
Glob: "src/Application/"
Glob: "src/Infrastructure/"
Glob: "src/Presentation/"

# Alternative naming
Glob: "src/Core/"
Glob: "src/Service/"
Glob: "src/Repository/"

# Namespace analysis
Grep: "namespace.*\\\\Domain\\\\" --glob "**/*.php"
Grep: "namespace.*\\\\Application\\\\" --glob "**/*.php"
Grep: "namespace.*\\\\Infrastructure\\\\" --glob "**/*.php"

Confidence scoring:

  • 4 distinct layers: +40
  • 3 distinct layers: +25
  • 2 distinct layers: +15
  • Proper namespace separation: +30
  • No cross-layer imports: +30
Dependency Direction Analysis
# Check for violations (Infrastructure → Domain is OK, Domain → Infrastructure is NOT)
# Domain should not import from Infrastructure
Grep: "use.*\\\\Infrastructure\\\\" --glob "**/Domain/**/*.php"

# Domain should not import from Application
Grep: "use.*\\\\Application\\\\" --glob "**/Domain/**/*.php"

# Application should not import from Presentation
Grep: "use.*\\\\(Controller|Action|Console)\\\\" --glob "**/Application/**/*.php"

# Infrastructure should implement Domain interfaces
Grep: "implements.*\\\\Domain\\\\" --glob "**/Infrastructure/**/*.php"

Output Format

## Architecture Pattern Analysis

### Detected Patterns

| Pattern | Confidence | Evidence |
|---------|-----------|----------|
| DDD | 85% | Domain layer, VOs, Aggregates, Repository interfaces |
| CQRS | 70% | Command/Query separation, handlers, bus |
| Layered | 90% | 4 layers with proper namespace separation |
| Hexagonal | 40% | Partial port/adapter separation |
| Event Sourcing | 0% | No event store or replay patterns found |

### Primary Pattern: DDD + Layered Architecture
The codebase follows Domain-Driven Design within a Layered Architecture.

### Dependency Direction

Presentation → Application → Domain ← Infrastructure ✓ ✓ ✓ (no violations)


### Violations Found
| From | To | File | Import |
|------|----|------|--------|
| Domain | Infrastructure | Order.php:5 | use App\Infrastructure\... |

### Pattern Maturity Assessment

| Aspect | Status | Notes |
|--------|--------|-------|
| Layer separation | Strong | Clear namespace boundaries |
| Domain purity | Good | 2 minor violations |
| CQRS completeness | Partial | Commands done, queries mixed |
| Interface segregation | Good | Ports defined in Domain |

Confidence Scale

Score Level Description
80-100% Strong Pattern is clearly and consistently applied
60-79% Moderate Pattern is present with some inconsistencies
40-59% Partial Pattern is partially applied or emerging
20-39% Weak Some elements present but not systematic
0-19% Absent Pattern not detected

Integration

This skill is used by:

  • codebase-navigator — determines overall architecture approach
  • explain-coordinator — decides which analysis agents to invoke
  • structural-auditor — provides pattern context for audit

使用示例

查看来源仓库中的使用示例与配置说明。

查看来源 ↗

来源历史

收录时间
2026-03-11
索引更新时间
2026-03-11
Branch
main

收录与同步日期属于本站记录。源码修改历史请查看来源仓库。

GitHub ↗

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!