smithery.ai

separation-of-concerns

Separation of Concerns principle for TypeScript code review and refactoring.

First seen Mar 25, 2026

Installation

$ npx skills add https://smithery.ai

Summary

  • Separation of Concerns principle for TypeScript code review and refactoring.
  • Use when detecting mixed responsibilities, business logic in UI components, infrastructure code in domain layer, or tightly coupled modules.
  • Helps improve modularity and maintainability.
  • Related to Clean Architecture layers.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery.ai · top by installs.

npx skills add https://smithery.ai

Browse all from smithery.ai

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 3,164 B
  • docs SUMMARY.md 331 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 2 installs

SKILL.md

Separation of Concerns

Divide a system into distinct sections, each addressing a separate concern. A concern is a set of information that affects the code.

Common Concerns to Separate

  • UI/Presentation: How things look
  • Business logic/Domain: What things do
  • Data access: Where things are stored
  • Navigation: How to move between screens
  • State management: How data flows
  • External services: Third-party integrations

Violation Signs

  • Components fetching data AND rendering AND handling business rules
  • Business logic importing React or framework-specific code
  • Database queries mixed with validation logic
  • UI components aware of API endpoint URLs
  • Navigation logic inside business rules

→ See [layers-example.md](references/layers-example.md) for complete before/after refactoring.

Layer Dependencies

┌─────────────────────────────────────────┐
│           Presentation Layer            │
│  (Screens, Components, Hooks, ViewModels)│
└─────────────────────┬───────────────────┘
                      │ depends on
                      ▼
┌─────────────────────────────────────────┐
│             Domain Layer                │
│    (Entities, UseCases, Ports)          │
└─────────────────────┬───────────────────┘
                      │ depends on
                      ▼
┌─────────────────────────────────────────┐
│          Infrastructure Layer           │
│   (Adapters, Repositories, Services)    │
└─────────────────────────────────────────┘

Domain has NO dependencies on Presentation or Infrastructure

Quick Checks by Layer

Layer Should NOT contain
Domain React imports, HTTP clients, AsyncStorage, navigation
Presentation Direct API calls, SQL queries, business rules
Infrastructure UI components, business decisions, routing

When Concerns Can Stay Together

  • Prototypes: Speed over architecture for throwaway code
  • Simple utilities: Pure functions without dependencies
  • Trivial components: A button that just styles and calls onPress
  • Co-location benefit: Sometimes keeping related code together aids understanding

The key question: "If I change this concern, how many unrelated things break?"