mcpField
S
solid

solid

github.com/marcioaltoeDevelopment049 installsUpdated 1d ago
Repository

About solid

solid is a development skill covering the five SOLID principles for software design, refactoring, and review. It includes detection questions, guidance for applying the principles at different scales, and common anti-patterns.

Key features

  1. 01Explain SRP, OCP, LSP, ISP, and DIP
  2. 02Provide class and module checklists
  3. 03Cover applications from functions to services
  4. 04List anti-patterns and remediation directions
  5. 05Offer interface and dependency design guidance

Use cases

  1. 01Design new classes, modules, or interfaces
  2. 02Refactor code with too many responsibilities
  3. 03Review architectural concerns in PRs
  4. 04Break up large classes or narrow interfaces

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/marcioaltoe/skills --skill solid

After installing, type/solidin Claude Code to confirm it loaded.

Bundled filesagents/openai.yamlreferences/PRINCIPLES.md

Details

From the project README

SOLID Principles

Five principles for building software that is easy to understand, extend, and maintain. They reduce coupling, increase cohesion, and make code testable.

When to Apply

Reference these principles when:

  • Designing new classes, modules, or interfaces
  • Refactoring code with too many responsibilities
  • Reviewing PRs for architectural concerns
  • Breaking apart god objects or fat interfaces
  • Deciding where to draw module boundaries
  • Making code more testable

Quick Reference

PrincipleOne-LinerRed Flag
SRPOne reason to change"This class handles X and Y and Z"
OCPAdd, don't modifyGrowing if/else or switch chains for types
LSPSubtypes are substitutableType-checking or special-casing in calling code
ISPSmall, focused interfacesEmpty method implementations or throw new Error("Not implemented")
DIPDepend on abstractionsnew ConcreteClass() inside business logic

See references/PRINCIPLES.md for detailed explanations and TypeScript examples.

Detection Checklist

Ask these questions for every class and module:

QuestionViolated Principle
Does this class have multiple reasons to change?SRP
Do I need to modify existing code to add a new variant?OCP
Does calling code need type-checks or special cases for subtypes?LSP
Are implementors forced to stub out unused methods?ISP
Does high-level logic directly instantiate infrastructure?DIP

Applying SOLID at Different Scales

ScaleSRPOCPLSPISPDIP
FunctionDoes one thing———Takes abstractions as params
ClassOne reason to changeExtend via compositionSubtypes honor contractsImplements only what it usesConstructor injection
ModuleOne bounded contextPlugin architectureInterchangeable implementationsThin public APIDepends inward
ServiceSingle domainNew features = new servicesAPI contract stabilityMinimal API surfaceAbstractions at boundaries

Relationships Between Principles

  • SRP + ISP: Splitting responsibilities often means splitting interfaces too
  • OCP + DIP: Depending on abstractions is what makes extension without modification possible
  • LSP + OCP: If subtypes are substitutable, you can extend behavior by adding new subtypes
  • DIP + ISP: Small focused interfaces make dependency inversion practical

Common Anti-Patterns

Anti-PatternViolated PrinciplesFix
God class doing everythingSRPExtract focused classes
switch on type across codebaseOCP, LSPReplace with polymorphism
Subclass that throws "not supported"LSP, ISPRedesign hierarchy, split interface
Fat interface with 20 methodsISPSplit into role-based interfaces
Business logic importing DB driverDIPInject repository interface
Service creating its own dependenciesDIPConstructor injection

Best Practices

DO
  • Start with SRP — it's the foundation for all others
  • Use interfaces to define boundaries between components
  • Let violations emerge from real problems, then fix them
  • Prefer composition over inheritance for extending behavior
  • Keep interfaces small and role-specific
  • Inject dependencies through constructors
DON'T
  • Apply SOLID dogmatically to trivial code (a 5-line utility doesn't need an interface)
  • Create abstractions before you have at least two implementations
  • Confuse SRP with "single method" — it's about reasons to change, not size
  • Force Liskov compliance on classes that shouldn't be in the same hierarchy
  • Over-segregate interfaces into single-method fragments when a cohesive group makes sense

Comments

Markdown supported