К основному содержанию
скилл CX Codex

architecture-review · decebals — скилл для Claude Code: разбор архитектуры Java

Скилл для макроразбора Java-проекта: структура пакетов, границы модулей, направление зависимостей и слои. Пригодится, когда кодовая база разрослась и непонятно, где что лежит.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add decebals/claude-code-java --skill architecture-review -a claude-code
Открыть на GitHub

Что делает architecture-review

Скилл смотрит на проект сверху: как разложены пакеты, куда смотрят зависимости между слоями, нет ли циклических связей. Внутри — справочник архитектурных запахов с симптомами и последствиями, три стратегии организации пакетов (по слоям, по фичам, гексагональная) и чек-лист проверки из пяти разделов. Отдельный блок про типовые антипаттерны: большая куча в одном пакете, свалка в util/, анемичная доменная модель, протечки фреймворка в домен.

Правило, вокруг которого всё строится: зависимости идут только внутрь, от адаптеров к приложению и дальше к домену. Домен не должен импортировать Spring, JPA или Jackson. Если сущность тянет @Entity или @Repository, скилл это отметит как нарушение и покажет, как вынести порт в домен, а реализацию — в адаптер.

Скилл текстовый: это инструкция для агента, без скриптов и внешних зависимостей. Работает в Claude, Codex, Cursor, GitHub Copilot, Gemini CLI и OpenCode. Для GitHub Copilot установка идёт через gh skill install, для остальных — через npx skills add.

Какие задачи решает

  • разложить пакеты по фичам вместо слоёв
  • поймать циклические зависимости между пакетами
  • вынести JPA-аннотации из доменных сущностей
  • оценить, готов ли модуль к выделению в отдельный сервис
  • разгрести свалку в util/ и common/

Примеры запросов агенту

  • проверь архитектуру проекта, покажи нарушения направления зависимостей
  • посмотри структуру пакетов и скажи, где домен тянет инфраструктуру
  • оцени, по какой стратегии организованы пакеты и что мешает выделить модуль

Как установить architecture-review

1Через Skills CLI (Vercel)

npx skills add decebals/claude-code-java --skill architecture-review -a claude-code

2Вручную: положить файлы

~/.claude/skills/architecture-review/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/architecture-review/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о architecture-review

Как установить architecture-review в Claude?

Выполните npx skills add decebals/claude-code-java --skill architecture-review -a claude-code. Скилл окажется в ~/.claude/skills/architecture-review/SKILL.md.

Что делает architecture-review?

Разбирает Java-проект на макроуровне: структуру пакетов, границы модулей, направление зависимостей и слои. Отдельно проверяет, соблюдены ли принципы чистой или гексагональной архитектуры.

Для каких платформ подходит скилл?

Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI и OpenCode. Для каждой платформы своя команда установки, файл скилла кладётся в её каталог.

Исходный текст

SKILL.md · MIT
---
name: architecture-review
description: Analyze Java project architecture at macro level - package structure, module boundaries, dependency direction, and layering. Use when user asks "review architecture", "check structure", "package organization", or when evaluating if a codebase follows clean architecture principles.
license: MIT
---

# Architecture Review Skill

Analyze project structure at the macro level - packages, modules, layers, and boundaries.

## When to Use
- User asks "review the architecture" / "check project structure"
- Evaluating package organization
- Checking dependency direction between layers
- Identifying architectural violations
- Assessing clean/hexagonal architecture compliance

---

## Quick Reference: Architecture Smells

| Smell | Symptom | Impact |
|-------|---------|--------|
| Package-by-layer bloat | `service/` with 50+ classes | Hard to find related code |
| Domain → Infra dependency | Entity imports `@Repository` | Core logic tied to framework |
| Circular dependencies | A → B → C → A | Untestable, fragile |
| God package | `util/` or `common/` growing | Dump for misplaced code |
| Leaky abstractions | Controller knows SQL | Layer boundaries violated |

---

## Package Organization Strategies

### Package-by-Layer (Traditional)

```
com.example.app/
├── controller/
│   ├── UserController.java
│   ├── OrderController.java
│   └── ProductController.java
├── service/
│   ├── UserService.java
│   ├── OrderService.java
│   └── ProductService.java
├── repository/
│   ├── UserRepository.java
│   ├── OrderRepository.java
│   └── ProductRepository.java
└── model/
    ├── User.java
    ├── Order.java
    └── Product.java
```

**Pros**: Familiar, simple for small projects
**Cons**: Scatters related code, doesn't scale, hard to extract modules

### Package-by-Feature (Recommended)

```
com.example.app/
├── user/
│   ├── UserController.java
│   ├── UserService.java
│   ├── UserRepository.java
│   └── User.java
├── order/
│   ├── OrderController.java
│   ├── OrderService.java
│   ├── OrderRepository.java
│   └── Order.java
└── product/
    ├── ProductController.java
    ├── ProductService.java
    ├── ProductRepository.java
    └── Product.java
```

**Pros**: Related code together, easy to extract, clear boundaries
**Cons**: May need shared kernel for cross-cutting concerns

### Hexagonal/Clean Architecture

```
com.example.app/
├── domain/                    # Pure business logic (no framework imports)
│   ├── model/
│   │   └── User.java
│   ├── port/
│   │   ├── in/               # Use cases (driven)
│   │   │   └── CreateUserUseCase.java
│   │   └── out/              # Repositories (driving)
│   │       └── UserRepository.java
│   └── service/
│       └── UserDomainService.java
├── application/               # Use case implementations
│   └── CreateUserService.java
├── adapter/
│   ├── in/
│   │   └── web/
│   │       └── UserController.java
│   └── out/
│       └── persistence/
│           ├── UserJpaRepository.java
│           └── UserEntity.java
└── config/
    └── BeanConfiguration.java
```

**Key rule**: Dependencies point inward (adapters → application → domain)

---

## Dependency Direction Rules

### The Golden Rule

```
┌─────────────────────────────────────────┐
│              Frameworks                 │  ← Outer (volatile)
├─────────────────────────────────────────┤
│           Adapters (Web, DB)            │
├─────────────────────────────────────────┤
│         Application Services            │
├─────────────────────────────────────────┤
│          Domain (Core Logic)            │  ← Inner (stable)
└─────────────────────────────────────────┘

Dependencies MUST point inward only.
Inner layers MUST NOT know about outer layers.
```

### Violations to Flag

```java
// ❌ Domain depends on infrastructure
package com.example.domain.model;

import org.springframework.data.jpa.repository.JpaRepository;  // Framework leak!
import javax.persistence.Entity;  // JPA in domain!

@Entity
public class User {
    // Domain polluted with persistence concerns
}

// ❌ Domain depends on adapter
package com.example.domain.service;

import com.example.adapter.out.persistence.UserJpaRepository;  // Wrong direction!

// ✅ Domain defines port, adapter implements
package com.example.domain.port.out;

public interface UserRepository {  // Pure interface, no JPA
    User findById(UserId id);
    void save(User user);
}
```

---

## Architecture Review Checklist

### 1. Package Structure
- [ ] Clear organization strategy (by-layer, by-feature, or hexagonal)
- [ ] Consistent naming across modules
- [ ] No `util/` or `common/` packages growing unbounded
- [ ] Feature packages are cohesive (related code together)

### 2. Dependency Direction
- [ ] Domain has ZERO framework imports (Spring, JPA, Jackson)
- [ ] Adapters depend on domain, not vice versa
- [ ] No circular dependencies between packages
- [ ] Clear dependency hierarchy

### 3. Layer Boundaries
- [ ] Controllers don't contain business logic
- [ ] Services don't know about HTTP (no HttpServletRequest)
- [ ] Repositories don't leak into controllers
- [ ] DTOs at boundaries, domain objects inside

### 4. Module Boundaries
- [ ] Each module has clear public API
- [ ] Internal classes are package-private
- [ ] Cross-module communication through interfaces
- [ ] No "reaching across" modules for internals

### 5. Scalability Indicators
- [ ] Could extract a feature to separate service? (microservice-ready)
- [ ] Are boundaries enforced or just conventional?
- [ ] Does adding a feature require touching many packages?

---

## Common Anti-Patterns

### 1. The Big Ball of Mud

```
src/main/java/com/example/
└── app/
    ├── User.java
    ├── UserController.java
    ├── UserService.java
    ├── UserRepository.java
    ├── Order.java
    ├── OrderController.java
    ├── ... (100+ files in one package)
```

**Fix**: Introduce package structure (start with by-feature)

### 2. The Util Dumping Ground

```
util/
├── StringUtils.java
├── DateUtils.java
├── ValidationUtils.java
├── SecurityUtils.java
├── EmailUtils.java      # Should be in notification module
├── OrderCalculator.java # Should be in order domain
└── UserHelper.java      # Should be in user domain
```

**Fix**: Move domain logic to appropriate modules, keep only truly generic utils

### 3. Anemic Domain Model

```java
// Domain object is just data
public class Order {
    private Long id;
    private List<OrderLine> lines;
    private BigDecimal total;
    // Only getters/setters, no behavior
}

// All logic in "service"
public class OrderService {
    public void addLine(Order order, Product product, int qty) { ... }
    public void calculateTotal(Order order) { ... }
    public void applyDiscount(Order order, Discount discount) { ... }
}
```

**Fix**: Move behavior to domain objects (rich domain model)

### 4. Framework Coupling in Domain

```java
package com.example.domain;

@Entity  // JPA
@Data    // Lombok
@JsonIgnoreProperties(ignoreUnknown = true)  // Jackson
public class User {
    @Id @GeneratedValue
    private Long id;

    @NotBlank  // Validation
    private String email;
}
```

**Fix**: Separate domain model from persistence/API models

---

## Analysis Commands

When reviewing architecture, examine:

```bash
# Package structure overview
find src/main/java -type d | head -30

# Largest packages (potential god packages)
find src/main/java -name "*.java" | xargs dirname | sort | uniq -c | sort -rn | head -10

# Check for framework imports in domain
grep -r "import org.springframework" src/main/java/*/domain/ 2>/dev/null
grep -r "import javax.persistence" src/main/java/*/domain/ 2>/dev/null

# Find circular dependencies (look for bidirectional imports)
# Check if package A imports from B and B imports from A
```

---

## Recommendations Format

When reporting findings:

```markdown
## Architecture Review: [Project Name]

### Structure Assessment
- **Organization**: Package-by-layer / Package-by-feature / Hexagonal
- **Clarity**: Clear / Mixed / Unclear

### Findings

| Severity | Issue | Location | Recommendation |
|----------|-------|----------|----------------|
| High | Domain imports Spring | `domain/model/User.java` | Extract pure domain model |
| Medium | God package | `util/` (23 classes) | Distribute to feature modules |
| Low | Inconsistent naming | `service/` vs `services/` | Standardize to `service/` |

### Dependency Analysis
[Describe dependency flow, violations found]

### Recommendations
1. [Highest priority fix]
2. [Second priority]
3. [Nice to have]
```

---

## Token Optimization

For large codebases:
1. Start with `find` to understand structure
2. Check only domain package for framework imports
3. Sample 2-3 features for pattern analysis
4. Don't read every file - look for patterns

© decebals · MIT · decebals/claude-code-java

Похожие скиллы

Всё по теме «Код-ревью и рефакторинг» →

Сначала — architecture-review от других авторов.

architecture-review Donchitos Проверяет, покрывают ли ADR требования из GDD, и ищет конфликты между решениями и проблемы совместимости с движком. CX Codex +1 429установок Python Backend Architecture Review rknall Скилл для ревью архитектуры Python-бэкенда: разбирает документ по системе, масштабируемости, безопасности и API. Пригодится, когда проект уже описан, а слабые места надо найти до релиза. CX Codex +1 503установок architecture-patterns secondsky Скилл для проектирования бэкенда: раскладывает код по слоям Clean Architecture, портам и адаптерам, подсказывает тактические приёмы DDD. CX Codex +1 493установок architecture-advisor codewithmukesh Задаёт вопросы про домен, команду и срок жизни системы, а потом советует архитектуру для .NET-проекта. Пригодится до того, как разложить решение по папкам. CX Codex +1 2 800установок arch-check codewithmukesh Сверяет кодовую базу с заявленной архитектурой: направление зависимостей, нарушения слоёв, утечки между модулями и циклы. Пригодится перед релизом или после крупной фичи. CX Codex +1 2 800установок guarding-architecture riekelt Защищает архитектурные границы проекта и превращает правила в автоматические тесты сборки. Пригодится при сквозных правках модулей или случайных импортах. CX Codex +1 18 000установок

Из того же набора10

java-code-review Скилл прогоняет Java-код по чек-листу: null safety, исключения, конкурентность, утечки ресурсов. Пригодится перед мержем PR. CX Codex +1 1 000установок clean-code Скилл учит агента принципам DRY, KISS и YAGNI, правилам именования и структурированию функций. Помогает при рефакторинге запутанного кода с длинными методами. CX Codex +1 379установок concurrency-review Находит гонки данных, блокировки и скрытые дефекты многопоточности в коде на Java. Проверяет как классические примитивы синхронизации, так и Virtual Threads. CX Codex +1 345установок solid-principles Скилл проверяет Java-код на соответствие принципам SOLID и помогает разгрузить разросшиеся классы. Пригодится при проектировании архитектуры и ревью дизайна. CX Codex +1 345установок design-patterns Справочник паттернов проектирования на Java с готовыми шаблонами кода. Помогает агенту внедрять Builder, Factory или Strategy при рефакторинге и проектировании архитектуры. CX Codex +1 336установок spring-boot-patterns Скилл задаёт структуру Spring Boot-проекта и шаблоны для контроллеров, сервисов и репозиториев. Пригодится, когда агент пишет новый код или разбирает чужой. CX Codex +1 322установок java-migration Ведёт проект по цепочке LTS-версий Java: от оценки текущего состояния до правки сборки и тестов. Пригодится, когда надо перевести легаси на Java 21 или 25. CX Codex +1 321установок performance-smell-detection Находит узкие места в Java-коде: создание лишних объектов и компиляцию regex в циклах. Помогает при ревью критичных к нагрузке участков. CX Codex +1 310установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой