Back to Skills

clean-architecture-review

verified

Validate Clean Architecture implementation in iOS. Checks layer separation (Presentation/Domain/Data), MVVM patterns, dependency injection with Swinject, and UseCase/Repository patterns. Use when reviewing architecture, checking layer boundaries, or validating DI.

View on GitHub

Marketplace

py-claude-marketplace

daispacy/py-claude-marketplace

Plugin

py-plugin

Repository

daispacy/py-claude-marketplace

py-plugin/skills/clean-architecture-review/SKILL.md

Last Verified

January 20, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/daispacy/py-claude-marketplace/blob/main/py-plugin/skills/clean-architecture-review/SKILL.md -a claude-code --skill clean-architecture-review

Installation paths:

Claude
.claude/skills/clean-architecture-review/
Powered by add-skill CLI

Instructions

# Clean Architecture Validator

Verify Clean Architecture and MVVM implementation in iOS code following Payoo Merchant patterns.

## When to Activate

- "architecture review", "layer separation", "clean architecture"
- "MVVM", "dependency injection", "DI"
- "use case", "repository pattern"
- Reviewing module structure or refactoring

## Architecture Layers

**Presentation** → ViewControllers, ViewModels, Views
**Domain** → UseCases (business logic), Models, Repository protocols
**Data** → Repository implementations, API Services, Local Storage

**Correct Flow**:
```
UI → ViewController → ViewModel → UseCase → Repository → API/DB
```

## Review Process

### Step 1: Map Architecture

Classify files into layers:
- Presentation: `*ViewController.swift`, `*ViewModel.swift`
- Domain: `*UseCase.swift`, `*Repository.swift` (protocols)
- Data: `*RepositoryImpl.swift`, `*ApiService.swift`

### Step 2: Check Layer Violations

**Critical Issues**:
- 🔴 ViewModel calling API directly (bypassing UseCase)
- 🔴 Business logic in ViewModel (should be in UseCase)
- 🔴 UseCase calling API directly (bypassing Repository)
- 🔴 Direct instantiation (no DI)

### Step 3: Verify Patterns

**BaseViewModel**:
```swift
✅ class PaymentViewModel: BaseViewModel<PaymentState>
❌ class PaymentViewModel  // Should extend BaseViewModel
```

**UseCase Pattern**:
```swift
✅ protocol PaymentUseCase { }
✅ class PaymentUseCaseImpl: PaymentUseCase { }
❌ class PaymentUseCase { }  // Should be protocol + impl
```

**Repository Pattern**:
```swift
✅ protocol PaymentRepository { }  // In Domain
✅ class PaymentRepositoryImpl: PaymentRepository { }  // In Data
```

**Dependency Injection**:
```swift
✅ init(paymentUC: PaymentUseCase) {  // Constructor injection
    self.paymentUC = paymentUC
}
❌ let paymentUC = PaymentUseCaseImpl()  // Direct instantiation
```

### Step 4: Generate Report

Provide:
- Architecture compliance score
- Layer violations by severity
- Current vs. should-be architecture
- Refactoring ste

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
4009 chars