- Move 12 markdown files from root to docs/ subdirectories - Organize documentation by category: • docs/troubleshooting/ (1 file) - Technical troubleshooting guides • docs/deployment/ (4 files) - Deployment and security documentation • docs/guides/ (3 files) - Feature-specific guides • docs/planning/ (4 files) - Planning and improvement proposals Root directory cleanup: - Reduced from 16 to 4 markdown files in root - Only essential project files remain: • CLAUDE.md (AI instructions) • README.md (Main project readme) • CLEANUP_PLAN.md (Current cleanup plan) • SRC_STRUCTURE_IMPROVEMENTS.md (Structure improvements) This improves: ✅ Documentation discoverability ✅ Logical organization by purpose ✅ Clean root directory ✅ Better maintainability
369 lines
9.7 KiB
Markdown
369 lines
9.7 KiB
Markdown
# Src Directory Structure Improvements
|
|
|
|
## Current Issues
|
|
|
|
### 1. Application Layer Fragmentation
|
|
```
|
|
src/Application/
|
|
├── Admin/ # Admin features
|
|
├── Api/ # API endpoints
|
|
├── Auth/ # Authentication
|
|
├── Backend/ # Backend integrations?
|
|
├── Campaign/ # Campaign management
|
|
├── Controller/ # Generic controllers?
|
|
├── Design/ # Design system?
|
|
├── Http/ # HTTP utilities
|
|
├── Service/ # Generic services?
|
|
├── Website/ # Website pages
|
|
└── ... (20+ directories)
|
|
```
|
|
|
|
**Problem**:
|
|
- No clear separation between features and infrastructure
|
|
- Mix of feature modules and technical layers
|
|
- Hard to find related code
|
|
|
|
### 2. Framework Layer Organization
|
|
```
|
|
src/Framework/
|
|
├── Async/
|
|
├── AsyncExamples/ # Examples should not be in Framework/
|
|
├── Cache/
|
|
├── Database/
|
|
├── DI/
|
|
├── Discovery/
|
|
└── ... (50+ directories)
|
|
```
|
|
|
|
**Problem**:
|
|
- Examples mixed with production code
|
|
- Very deep nesting (Database/Schema/Index/Analysis/)
|
|
- Some modules could be consolidated
|
|
|
|
### 3. Domain Layer Inconsistency
|
|
```
|
|
src/Domain/
|
|
├── AI/ # Is this really domain?
|
|
├── Common/ # Shared code
|
|
├── Contact/
|
|
├── Media/
|
|
├── Meta/ # What is Meta domain?
|
|
├── Newsletter/
|
|
├── PreSave/ # Feature-specific
|
|
├── SmartLink/
|
|
└── User/
|
|
```
|
|
|
|
**Problem**:
|
|
- Mix of bounded contexts and shared code
|
|
- Unclear domain boundaries
|
|
- Technical concerns (AI) mixed with business domains
|
|
|
|
## Proposed Improvements
|
|
|
|
### A. Application Layer Restructuring
|
|
|
|
**Option 1: Feature-Based Modules** (RECOMMENDED)
|
|
```
|
|
src/Application/
|
|
├── Admin/ # Admin Panel Feature
|
|
│ ├── Analytics/
|
|
│ ├── Content/
|
|
│ ├── System/
|
|
│ └── Controllers/
|
|
├── Api/ # API Layer
|
|
│ ├── V1/
|
|
│ ├── V2/
|
|
│ └── Middleware/
|
|
├── Auth/ # Authentication Feature
|
|
│ ├── Controllers/
|
|
│ ├── Middleware/
|
|
│ └── Services/
|
|
├── Campaign/ # Campaign Management Feature
|
|
│ ├── Controllers/
|
|
│ ├── Services/
|
|
│ └── ValueObjects/
|
|
├── Website/ # Public Website Feature
|
|
│ ├── Controllers/
|
|
│ ├── Services/
|
|
│ └── templates/
|
|
└── Shared/ # Application-wide shared code
|
|
├── Controllers/ # Base controllers
|
|
├── Middleware/
|
|
└── Services/
|
|
```
|
|
|
|
**Benefits**:
|
|
- Clear feature boundaries
|
|
- Related code grouped together
|
|
- Easy to find and navigate
|
|
- Follows Vertical Slice Architecture
|
|
|
|
**Option 2: Layer-Based Organization**
|
|
```
|
|
src/Application/
|
|
├── Controllers/ # All controllers
|
|
│ ├── Admin/
|
|
│ ├── Api/
|
|
│ ├── Auth/
|
|
│ └── Website/
|
|
├── Services/ # All services
|
|
├── Middleware/ # All middleware
|
|
└── ValueObjects/ # Application VOs
|
|
```
|
|
|
|
**Benefits**:
|
|
- Technical separation
|
|
- Easy to see all controllers/services
|
|
- Simpler structure
|
|
|
|
**Downside**: Harder to see complete features
|
|
|
|
### B. Framework Layer Improvements
|
|
|
|
**Clean Up Examples**:
|
|
```bash
|
|
# Move examples OUT of src/Framework/
|
|
src/
|
|
├── Framework/ # Production framework code
|
|
│ ├── Cache/
|
|
│ ├── Database/
|
|
│ ├── DI/
|
|
│ └── ...
|
|
└── Examples/ # All examples here
|
|
├── Async/
|
|
├── Cache/
|
|
├── Database/
|
|
└── GraphQL/
|
|
```
|
|
|
|
**Consolidate Deep Nesting**:
|
|
```
|
|
src/Framework/Database/
|
|
├── Connection/ # Consolidated connection handling
|
|
│ ├── Async/
|
|
│ ├── Middleware/
|
|
│ ├── Pooled/
|
|
│ └── ReadWrite/
|
|
├── Migration/
|
|
│ ├── Commands/
|
|
│ ├── Runners/
|
|
│ └── ValueObjects/
|
|
├── Monitoring/
|
|
│ ├── Health/
|
|
│ ├── Profiling/
|
|
│ └── Metrics/
|
|
├── QueryBuilder/
|
|
├── Repository/
|
|
├── Schema/
|
|
│ ├── Blueprint/
|
|
│ ├── Comparison/
|
|
│ └── Index/
|
|
└── UnitOfWork/
|
|
```
|
|
|
|
**Instead of**:
|
|
```
|
|
Database/
|
|
Monitoring/
|
|
Health/
|
|
Checks/ # Too deep!
|
|
```
|
|
|
|
### C. Domain Layer Restructuring
|
|
|
|
**Bounded Contexts Approach**:
|
|
```
|
|
src/Domain/
|
|
├── BoundedContexts/ # Clear business domains
|
|
│ ├── Campaign/
|
|
│ │ ├── Entities/
|
|
│ │ ├── ValueObjects/
|
|
│ │ ├── Services/
|
|
│ │ └── Repositories/
|
|
│ ├── Contact/
|
|
│ ├── Media/
|
|
│ ├── Newsletter/
|
|
│ ├── SmartLink/ # Renamed from PreSave
|
|
│ └── User/
|
|
├── Shared/ # Shared Kernel
|
|
│ ├── ValueObjects/ # Cross-domain VOs
|
|
│ ├── Interfaces/
|
|
│ └── Exceptions/
|
|
└── Services/ # Domain Services
|
|
└── AI/ # AI as domain service
|
|
```
|
|
|
|
**Benefits**:
|
|
- Clear bounded context boundaries
|
|
- Shared kernel explicit
|
|
- Domain services separated
|
|
- DDD-compliant structure
|
|
|
|
## Migration Strategy
|
|
|
|
### Phase 1: Immediate Cleanup (Week 1)
|
|
```bash
|
|
# 1. Move examples out of Framework
|
|
mkdir -p examples
|
|
mv src/Framework/AsyncExamples examples/Async
|
|
mv src/Framework/Database/Examples examples/Database
|
|
# ... repeat for all examples
|
|
|
|
# 2. Update composer.json autoload
|
|
"autoload": {
|
|
"psr-4": {
|
|
"App\\": "src/",
|
|
"Examples\\": "examples/"
|
|
}
|
|
}
|
|
|
|
# 3. Regenerate autoloader
|
|
composer dump-autoload
|
|
```
|
|
|
|
### Phase 2: Documentation (Week 2)
|
|
```bash
|
|
# Create architecture docs
|
|
docs/architecture/
|
|
├── application-layer.md # Feature-based organization
|
|
├── framework-layer.md # Framework structure
|
|
├── domain-layer.md # Bounded contexts
|
|
└── migration-guide.md # How to navigate new structure
|
|
```
|
|
|
|
### Phase 3: Gradual Migration (Weeks 3-6)
|
|
- Move Application code to feature modules (one at a time)
|
|
- Consolidate Framework deep nesting
|
|
- Restructure Domain bounded contexts
|
|
- Update imports and tests
|
|
|
|
## Recommended Final Structure
|
|
|
|
```
|
|
michaelschiemer/
|
|
├── bin/
|
|
├── config/
|
|
├── docs/
|
|
│ ├── architecture/
|
|
│ ├── deployment/
|
|
│ └── guides/
|
|
├── examples/ # All framework examples
|
|
│ ├── Async/
|
|
│ ├── Cache/
|
|
│ ├── Database/
|
|
│ └── GraphQL/
|
|
├── public/ # Minimal! Only index.php + health.php
|
|
├── resources/
|
|
│ ├── css/
|
|
│ └── js/
|
|
├── scripts/
|
|
│ ├── debug/
|
|
│ ├── test/
|
|
│ ├── deployment/
|
|
│ └── maintenance/
|
|
├── src/
|
|
│ ├── Application/ # Feature-based modules
|
|
│ │ ├── Admin/
|
|
│ │ ├── Api/
|
|
│ │ ├── Auth/
|
|
│ │ ├── Campaign/
|
|
│ │ ├── Website/
|
|
│ │ └── Shared/
|
|
│ ├── Domain/ # Bounded contexts
|
|
│ │ ├── BoundedContexts/
|
|
│ │ │ ├── Campaign/
|
|
│ │ │ ├── Contact/
|
|
│ │ │ ├── Media/
|
|
│ │ │ ├── Newsletter/
|
|
│ │ │ ├── SmartLink/
|
|
│ │ │ └── User/
|
|
│ │ ├── Shared/
|
|
│ │ └── Services/
|
|
│ ├── Framework/ # Framework (production only)
|
|
│ │ ├── Cache/
|
|
│ │ ├── Console/
|
|
│ │ ├── Database/
|
|
│ │ ├── DI/
|
|
│ │ ├── Discovery/
|
|
│ │ ├── Http/
|
|
│ │ └── ...
|
|
│ └── Infrastructure/ # External integrations
|
|
│ ├── GeoIp/
|
|
│ └── ...
|
|
├── storage/
|
|
├── tests/ # Mirrors src/ structure
|
|
│ ├── Application/
|
|
│ ├── Domain/
|
|
│ ├── Framework/
|
|
│ └── Integration/
|
|
├── var/
|
|
└── vendor/
|
|
|
|
```
|
|
|
|
## Quality Metrics
|
|
|
|
**Before**:
|
|
- Root files: 105
|
|
- Public debug files: 9
|
|
- Application directories: 25+
|
|
- Framework nesting depth: 6 levels
|
|
- Examples in production: Yes
|
|
|
|
**After**:
|
|
- Root files: ~15 (essential only)
|
|
- Public debug files: 0 (SECURITY!)
|
|
- Application modules: ~8 (feature-based)
|
|
- Framework nesting depth: 3-4 levels max
|
|
- Examples location: Separate examples/ directory
|
|
|
|
## Implementation Checklist
|
|
|
|
- [ ] Move debug/test scripts to scripts/
|
|
- [ ] Clean up public/ directory (SECURITY PRIORITY!)
|
|
- [ ] Move examples out of src/Framework/
|
|
- [ ] Create examples/ directory
|
|
- [ ] Consolidate documentation in docs/
|
|
- [ ] Restructure Application layer (feature-based)
|
|
- [ ] Simplify Framework deep nesting
|
|
- [ ] Organize Domain bounded contexts
|
|
- [ ] Update composer autoload
|
|
- [ ] Update all imports
|
|
- [ ] Update tests to match new structure
|
|
- [ ] Update .gitignore
|
|
- [ ] Clear old cache files
|
|
- [ ] Document new structure
|
|
- [ ] Create navigation guide
|
|
|
|
## Tools to Create
|
|
|
|
### 1. Structure Validator
|
|
```bash
|
|
php console.php structure:validate
|
|
|
|
# Checks:
|
|
# - No PHP files in public/ except index.php/health.php
|
|
# - All examples in examples/ directory
|
|
# - Cache size warnings
|
|
# - Proper namespace structure
|
|
```
|
|
|
|
### 2. Automatic Cleanup
|
|
```bash
|
|
php console.php cleanup:project
|
|
|
|
# Actions:
|
|
# - Clear old cache files
|
|
# - Remove temporary files
|
|
# - Report orphaned files
|
|
```
|
|
|
|
### 3. Migration Helper
|
|
```bash
|
|
php console.php migrate:structure --dry-run
|
|
|
|
# Shows what would be moved/changed
|
|
# Then run without --dry-run to execute
|
|
```
|