# 架构约束规则

## 🏗️ 分层架构

```
┌─────────────────┐
│      App        │  ← 业务开发层（用户自定义业务模块）
│   (用户业务)     │    电商、CRM、ERP等具体业务逻辑
└─────────────────┘
         ↓
┌─────────────────┐
│     Common      │  ← 框架通用服务层（企业级通用功能）
│ (框架通用服务)   │    用户管理、权限管理、菜单管理
└─────────────────┘    文件上传、通知服务、系统设置
         ↓              数据字典、缓存服务、队列服务
┌─────────────────┐
│      Core       │  ← 核心基础设施层（底层基础设施）
│   (基础设施)     │    认证核心、数据库核心、验证核心
└─────────────────┘    HTTP核心、缓存核心、队列核心
         ↓
┌─────────────────┐
│     Vendor      │  ← 第三方服务适配层
│   (外部集成)     │    存储、支付、通信、云服务适配
└─────────────────┘

┌─────────────────┐
│     Addons      │  ← 插件扩展层（可插拔功能模块）
│   (插件扩展)     │    扩展框架功能，不影响核心稳定性
└─────────────────┘

┌─────────────────┐
│      Test       │  ← 测试代码层（独立测试模块）
│   (测试代码)     │    单元测试、集成测试、E2E测试
└─────────────────┘
```

## 📋 依赖约束规则

### 1. **Core 层（最底层）**
- ✅ **允许依赖**：无（最底层基础设施）
- ❌ **禁止依赖**：Common、App、Vendor 层
- 📁 **位置**：`src/core/`
- 🎯 **职责**：提供最基础的抽象和接口

### 2. **Vendor 层（第三方适配）**
- ✅ **允许依赖**：Core 层
- ❌ **禁止依赖**：Common、App 层
- 📁 **位置**：`src/vendor/`
- 🎯 **职责**：第三方服务适配，实现 Core 层抽象

### 3. **Common 层（通用服务）**
- ✅ **允许依赖**：Core 层
- ❌ **禁止依赖**：App、Vendor 层
- 📁 **位置**：`src/common/`
- 🎯 **职责**：企业级通用功能，基于 Core 层构建

### 4. **App 层（业务应用）**
- ✅ **允许依赖**：Common、Core 层
- ❌ **禁止依赖**：Vendor 层（通过 Common 层抽象）
- 📁 **位置**：`src/app/`
- 🎯 **职责**：具体业务逻辑实现

### 5. **Test 层（测试代码）**
- ✅ **允许依赖**：所有层（测试需要）
- 📁 **位置**：`test/`（项目根目录）
- ❌ **禁止位置**：`src/` 目录下
- 🎯 **职责**：测试所有层的功能

## 🚫 禁止的依赖关系

```typescript
// ❌ 错误：Common 层依赖 App 层
// src/common/auth/auth.service.ts
import { AppService } from '../../app/app.service'; // 禁止！

// ❌ 错误：Core 层依赖 Common 层  
// src/core/database/database.service.ts
import { UserService } from '../../common/user/user.service'; // 禁止！

// ❌ 错误：App 层直接依赖 Vendor 层
// src/app/payment/payment.service.ts
import { AlipayProvider } from '../../vendor/payment/alipay.provider'; // 禁止！

// ❌ 错误：在 src 目录下创建测试代码
// src/test/test.service.ts - 禁止！
```

## ✅ 正确的依赖关系

```typescript
// ✅ 正确：Common 层依赖 Core 层
// src/common/auth/auth.service.ts
import { JwtService } from '../../core/auth/jwt.service';

// ✅ 正确：App 层依赖 Common 层
// src/app/user/user.controller.ts
import { AuthService } from '../../common/auth/auth.service';

// ✅ 正确：Vendor 层依赖 Core 层
// src/vendor/payment/alipay.provider.ts
import { PaymentProvider } from '../../core/payment/payment.provider';

// ✅ 正确：测试代码依赖所有层
// test/auth.test.ts
import { AuthService } from '../src/common/auth/auth.service';
```

## 🔧 ESLint 规则

项目已配置严格的 ESLint 规则来强制执行这些约束：

1. **分层依赖检查**：自动检测违反依赖方向的导入
2. **测试代码位置检查**：禁止在 src 目录下创建测试代码
3. **路径别名检查**：强制使用相对路径，避免路径别名
4. **内部实现检查**：禁止依赖其他模块的内部实现

## 📝 开发建议

1. **设计时先确定层级**：新功能应该放在哪一层？
2. **依赖时检查方向**：确保依赖关系符合架构约束
3. **测试代码统一管理**：所有测试代码放在 `test/` 目录
4. **定期运行 ESLint**：`npm run lint` 检查架构约束
5. **代码审查时关注架构**：确保新代码符合分层原则

## 🚨 常见错误

1. **在 Core 层导入业务逻辑**
2. **Common 层直接调用第三方服务**
3. **App 层绕过 Common 层直接使用 Vendor**
4. **测试代码放在 src 目录下**
5. **使用绝对路径或路径别名导入**

遵循这些约束规则，可以确保 WWJCloud 的架构清晰、依赖关系正确，为未来的微服务拆分奠定坚实基础。 