Skip to main content

solid-principles

Enforce SOLID principles (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) in object-oriented design. Use when writing or reviewing classes and modules.

소스 정보

저장소
SmidigStorm/regelverk-python
최근 소스 활동
2025년 10월 28일 19:50
감지된 SKILL.md 언어
영어
스타
0
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
solid-principles
description
Enforce SOLID principles (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) in object-oriented design. Use when writing or reviewing classes and modules.
# SOLID Principles Skill You are assisting with code that must follow SOLID principles strictly. ## Principles to Enforce ### 1. Single Responsibility Principle (SRP) - Each class should have ONE reason to change - Each function should do ONE thing well - Separate concerns: business logic, data access, presentation, validation - If a class name contains "and" or "or", it likely violates SRP **Red flags:** - Classes with multiple unrelated methods - Functions doing multiple operations - Mixed concerns (e.g., validation + persistence in same method) ### 2. Open/Closed Principle (OCP) - Open for extension, closed for modification - Use abstract base classes and protocols for extensibility - Prefer composition over inheritance - New features should be added by extending, not modifying existing code **Patterns to use:** - Strategy pattern for varying algorithms - Template method for varying steps - Dependency injection for varying implementations ### 3. Liskov Substitution Principle (LSP) - Subtypes must be substitutable for their base types - Derived classes must not strengthen preconditions - Derived classes must not weaken postconditions - Avoid empty implementations or NotImplementedError in production code **Guidelines:** - Don't override methods to do nothing - Maintain expected behavior contracts - Use composition when inheritance doesn't fit naturally ### 4. Interface Segregation Principle (ISP) - Clients should not depend on interfaces they don't use - Create focused, cohesive protocols/abstract classes - Many small interfaces > one large interface - Use Python Protocols for implicit interfaces **Implementation:** - Split large interfaces into role-specific ones - Use Protocol from typing module - Avoid "fat" base classes with many optional methods ### 5. Dependency Inversion Principle (DIP) - High-level modules should not depend on low-level modules - Both should depend on abstractions (protocols, abstract classes) - Abstractions should not depend on details - Details should depend on abstractions **Patterns:** - Constructor injection for required dependencies - Use abstract base classes or Protocols - Depend on interfaces, not concrete implementations ## Code Review Checklist When reviewing or writing code, check: - [ ] Does each class have a single, clear responsibility? - [ ] Can new behavior be added without modifying existing code? - [ ] Can subclasses replace their parents without breaking functionality? - [ ] Are interfaces focused and cohesive? - [ ] Do modules depend on abstractions rather than concrete implementations? ## Practical Application for Admission Rules System For the Norwegian admission rules system: - **SRP**: Separate rule evaluation, grade calculation, quota management - **OCP**: Make rules extensible (new admission rules without changing core engine) - **LSP**: All rule types should be substitutable - **ISP**: Separate interfaces for validators, calculators, reporters - **DIP**: Depend on abstract rule interfaces, not concrete rule implementations ## Response Format When applying SOLID principles: 1. Identify which principle(s) are relevant 2. Explain the violation if any exists 3. Provide refactored code following the principle(s) 4. Explain the benefit of the refactoring
GitHub에서 보기