Loading...
Loading...
Compare original and translation side by side
| Rule | Check | Example Violation |
|---|---|---|
| Max Nesting | Max 4 levels from src/ or app/ | |
| No Barrel Files | No index.ts re-exports | |
| Component Location | React components in components/ or features/ | |
| Hook Location | Custom hooks in hooks/ directory | |
| Import Direction | Unidirectional: shared → features → app | |
| 规则 | 检查内容 | 违规示例 |
|---|---|---|
| 最大嵌套深度 | 从src/或app/开始最多4级嵌套 | |
| 禁止桶文件 | 不允许使用仅用于重新导出的index.ts | |
| 组件位置 | React组件必须放在components/或features/目录下 | |
| Hook位置 | 自定义Hook必须放在hooks/目录下 | |
| 导入方向 | 单向导入:shared → features → app | |
src/
├── app/ # Next.js App Router (pages)
│ ├── (auth)/ # Route groups
│ ├── api/ # API routes
│ └── layout.tsx
├── components/ # Reusable UI components
│ ├── ui/ # Primitive components
│ └── forms/ # Form components
├── features/ # Feature modules (self-contained)
│ ├── auth/
│ │ ├── components/
│ │ ├── hooks/
│ │ ├── services/
│ │ └── types.ts
│ └── dashboard/
├── hooks/ # Global custom hooks
├── lib/ # Third-party integrations
├── services/ # API clients
├── types/ # Global TypeScript types
└── utils/ # Pure utility functionssrc/
├── app/ # Next.js App Router(页面)
│ ├── (auth)/ # 路由组
│ ├── api/ # API路由
│ └── layout.tsx
├── components/ # 可复用UI组件
│ ├── ui/ # 基础组件
│ └── forms/ # 表单组件
├── features/ # 功能模块(独立封装)
│ ├── auth/
│ │ ├── components/
│ │ ├── hooks/
│ │ ├── services/
│ │ └── types.ts
│ └── dashboard/
├── hooks/ # 全局自定义Hook
├── lib/ # 第三方集成
├── services/ # API客户端
├── types/ # 全局TypeScript类型
└── utils/ # 纯工具函数app/
├── routers/ # API route handlers
│ ├── router_users.py
│ ├── router_auth.py
│ └── deps.py # Shared dependencies
├── services/ # Business logic layer
│ ├── user_service.py
│ └── auth_service.py
├── repositories/ # Data access layer
│ ├── user_repository.py
│ └── base_repository.py
├── schemas/ # Pydantic models
│ ├── user_schema.py
│ └── auth_schema.py
├── models/ # SQLAlchemy models
│ ├── user_model.py
│ └── base.py
├── core/ # Config, security, deps
│ ├── config.py
│ ├── security.py
│ └── database.py
└── utils/ # Utility functionsapp/
├── routers/ # API路由处理器
│ ├── router_users.py
│ ├── router_auth.py
│ └── deps.py # 共享依赖
├── services/ # 业务逻辑层
│ ├── user_service.py
│ └── auth_service.py
├── repositories/ # 数据访问层
│ ├── user_repository.py
│ └── base_repository.py
├── schemas/ # Pydantic模型
│ ├── user_schema.py
│ └── auth_schema.py
├── models/ # SQLAlchemy模型
│ ├── user_model.py
│ └── base.py
├── core/ # 配置、安全、依赖
│ ├── config.py
│ ├── security.py
│ └── database.py
└── utils/ # 工具函数src/app/ALLOWED (4 levels):
src/features/auth/components/LoginForm.tsx
app/routers/v1/users/router_users.py
BLOCKED (5+ levels):
src/features/dashboard/widgets/charts/line/LineChart.tsx
↳ Flatten to: src/features/dashboard/charts/LineChart.tsxsrc/app/允许(4级):
src/features/auth/components/LoginForm.tsx
app/routers/v1/users/router_users.py
禁止(5级及以上):
src/features/dashboard/widgets/charts/line/LineChart.tsx
↳ 扁平化处理为:src/features/dashboard/charts/LineChart.tsxindex.ts// BLOCKED: src/components/index.ts
export { Button } from './Button';
export { Input } from './Input';
export { Modal } from './Modal';
// GOOD: Import directly
import { Button } from '@/components/Button';
import { Input } from '@/components/Input';index.ts// 禁止:src/components/index.ts
export { Button } from './Button';
export { Input } from './Input';
export { Modal } from './Modal';
// 推荐:直接导入
import { Button } from '@/components/Button';
import { Input } from '@/components/Input';┌─────────────────────────────────────────────────────────┐
│ │
│ shared/lib → components → features → app │
│ │
│ (lowest) (highest) │
│ │
└─────────────────────────────────────────────────────────┘┌─────────────────────────────────────────────────────────┐
│ │
│ shared/lib → components → features → app │
│ │
│ (最低层级) (最高层级) │
│ │
└─────────────────────────────────────────────────────────┘| Layer | Can Import From |
|---|---|
| Nothing (base layer) |
| |
| |
| Everything above |
| 层级 | 可导入的来源 |
|---|---|
| 无(基础层级) |
| |
| |
| 以上所有层级 |
// BLOCKED: shared/ importing from features/
// File: src/shared/utils.ts
import { authConfig } from '@/features/auth/config'; // ❌
// BLOCKED: features/ importing from app/
// File: src/features/auth/useAuth.ts
import { RootLayout } from '@/app/layout'; // ❌
// BLOCKED: Cross-feature imports
// File: src/features/auth/useAuth.ts
import { DashboardContext } from '@/features/dashboard/context'; // ❌
// Fix: Extract to shared/ if needed by multiple features// 禁止:shared/从features/导入
// 文件:src/shared/utils.ts
import { authConfig } from '@/features/auth/config'; // ❌
// 禁止:features/从app/导入
// 文件:src/features/auth/useAuth.ts
import { RootLayout } from '@/app/layout'; // ❌
// 禁止:跨功能模块导入
// 文件:src/features/auth/useAuth.ts
import { DashboardContext } from '@/features/dashboard/context'; // ❌
// 修复方案:如果多个功能模块需要,提取到shared/目录// ALLOWED: Type-only import from another feature
import type { User } from '@/features/users/types';// 允许:从其他功能模块仅导入类型
import type { User } from '@/features/users/types';ALLOWED:
src/components/Button.tsx
src/components/ui/Card.tsx
src/features/auth/components/LoginForm.tsx
src/app/dashboard/page.tsx
BLOCKED:
src/utils/Button.tsx # Components not in utils/
src/services/Modal.tsx # Components not in services/
src/hooks/Dropdown.tsx # Components not in hooks/允许:
src/components/Button.tsx
src/components/ui/Card.tsx
src/features/auth/components/LoginForm.tsx
src/app/dashboard/page.tsx
禁止:
src/utils/Button.tsx # 组件不能放在utils/目录
src/services/Modal.tsx # 组件不能放在services/目录
src/hooks/Dropdown.tsx # 组件不能放在hooks/目录ALLOWED:
src/hooks/useAuth.ts
src/hooks/useLocalStorage.ts
src/features/auth/hooks/useLogin.ts
BLOCKED:
src/components/useAuth.ts # Hooks not in components/
src/utils/useDebounce.ts # Hooks not in utils/
src/services/useFetch.ts # Hooks not in services/允许:
src/hooks/useAuth.ts
src/hooks/useLocalStorage.ts
src/features/auth/hooks/useLogin.ts
禁止:
src/components/useAuth.ts # Hook不能放在components/目录
src/utils/useDebounce.ts # Hook不能放在utils/目录
src/services/useFetch.ts # Hook不能放在services/目录ALLOWED:
app/routers/router_users.py
app/routers/routes_auth.py
app/routers/api_v1.py
BLOCKED:
app/users_router.py # Not in routers/
app/services/router_users.py # Router in services/允许:
app/routers/router_users.py
app/routers/routes_auth.py
app/routers/api_v1.py
禁止:
app/users_router.py # 不能放在routers/目录外
app/services/router_users.py # 路由文件不能放在services/目录ALLOWED:
app/services/user_service.py
app/services/auth_service.py
BLOCKED:
app/user_service.py # Not in services/
app/routers/user_service.py # Service in routers/允许:
app/services/user_service.py
app/services/auth_service.py
禁止:
app/user_service.py # 不能放在services/目录外
app/routers/user_service.py # 服务文件不能放在routers/目录BLOCKED: Max nesting depth exceeded: 5 levels (max: 4)
File: src/features/dashboard/widgets/charts/line/LineChart.tsx
Consider flattening: src/features/dashboard/charts/LineChart.tsx禁止:超过最大嵌套深度:5级(最大允许4级)
文件:src/features/dashboard/widgets/charts/line/LineChart.tsx
建议扁平化处理为:src/features/dashboard/charts/LineChart.tsxBLOCKED: Barrel files (index.ts) discouraged - causes tree-shaking issues
File: src/components/index.ts
Import directly from source files instead禁止:不推荐使用桶文件(index.ts)——会导致Tree Shaking失效
文件:src/components/index.ts
建议直接从源文件导入BLOCKED: React components must be in components/, features/, or app/
File: src/utils/Button.tsx
Move to: src/components/Button.tsx禁止:React组件必须放在components/、features/或app/目录下
文件:src/utils/Button.tsx
建议移动到:src/components/Button.tsxBLOCKED: Import direction violation (unidirectional architecture)
features/ cannot import from app/
Import direction: features -> shared, lib, components
Allowed flow: shared/lib -> components -> features -> app禁止:导入方向违规(单向架构要求)
features/不能从app/导入
允许的导入流向:features → shared, lib, components
正确依赖流:shared/lib → components → features → appBLOCKED: Cannot import from other features (cross-feature dependency)
File: src/features/auth/useAuth.ts
Import: from '@/features/dashboard/context'
Extract shared code to shared/ or lib/禁止:不能从其他功能模块导入(跨功能模块依赖)
文件:src/features/auth/useAuth.ts
导入来源:@/features/dashboard/context
建议将共享代码提取到shared/或lib/目录undefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedbackend-architecture-enforcerclean-architecturetype-safety-validationbackend-architecture-enforcerclean-architecturetype-safety-validation