Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Suggest design patterns and evaluate SOLID principles. Trigger with "suggest design patterns", "which patterns apply?", "check SOLID principles", "detect anti-patterns", "evaluate code design".
.claude/skills/wasabeef-suggest-design-patterns-and-evaluate-solid-principles/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | -26% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -17% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 79% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -23% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -27% | 0% |
Suggests design patterns for your code and checks if it follows SOLID principles.
bash/design-patterns [analysis_target] [options]
--suggest: Suggest applicable patterns (default)--analyze: Analyze existing pattern usage--refactor: Generate refactoring proposals--solid: Check compliance with SOLID principles--anti-patterns: Detect anti-patternsbash# Analyze patterns for entire project /design-patterns # Suggest patterns for specific file /design-patterns src/services/user.js --suggest # Check SOLID principles /design-patterns --solid # Detect anti-patterns /design-patterns --anti-patterns
textS - Single Responsibility (one class, one job) O - Open/Closed (open for extension, closed for modification) L - Liskov Substitution (subtypes should be replaceable) I - Interface Segregation (don't force unused methods) D - Dependency Inversion (depend on abstractions, not details)
textDesign Pattern Analysis Report ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Currently Used Patterns ├─ Observer Pattern: EventEmitter (12 instances) ├─ Factory Pattern: UserFactory (3 instances) ├─ Singleton Pattern: DatabaseConnection (1 instance) └─ Strategy Pattern: PaymentProcessor (5 instances) Recommended Patterns ├─ [HIGH] Repository Pattern │ └─ Where: src/models/*.js │ └─ Why: Separate data access from business logic │ └─ Example: │ class UserRepository { │ async findById(id) { ... } │ async save(user) { ... } │ } │ ├─ [MED] Command Pattern │ └─ Where: src/api/handlers/*.js │ └─ Why: Standardize how requests are handled │ └─ [LOW] Decorator Pattern └─ Where: src/middleware/*.js └─ Why: Better way to combine features SOLID Violations Found ├─ [S] UserService: Does too much (auth AND authorization) ├─ [O] PaymentGateway: Must change code to add payment types ├─ [D] EmailService: Depends on specific classes, not interfaces └─ [I] IDataStore: Has methods nobody uses How to Fix 1. Split UserService into AuthService and AuthorizationService 2. Add a PaymentStrategy interface for new payment types 3. Create an EmailService interface 4. Break up IDataStore into smaller interfaces
bash# See what happens if you use a pattern /design-patterns --impact-analysis Repository # Get example code for a pattern /design-patterns --generate Factory --for src/models/Product.js # Find patterns that work well together /design-patterns --combine --context "API with caching" # Check your architecture /design-patterns --architecture MVC
javascriptclass OrderService { processOrder(order, paymentType) { if (paymentType === "credit") { // Credit card processing } else if (paymentType === "paypal") { // PayPal processing } // Other payment methods... } }
javascript// Strategy interface class PaymentStrategy { process(amount) { throw new Error("Must implement process method"); } } // Concrete strategies class CreditCardPayment extends PaymentStrategy { process(amount) { /* Implementation */ } } // Context class OrderService { constructor(paymentStrategy) { this.paymentStrategy = paymentStrategy; } processOrder(order) { this.paymentStrategy.process(order.total); } }
Other measured skills in the registry, with their headline benchmark lift.