| name | dev |
| description | DevTools 项目开发技能,遵循 DDD 领域驱动设计。当用户请求开发新功能、添加工具、修改现有功能或询问项目架构时使用此技能。 |
DevTools 开发技能
当用户请求开发新功能、添加工具或修改现有功能时,使用此技能。
领域模型 (Domain Model)
核心领域 (Core Domain)
本项目是一个开发者工具集合平台,核心价值是提供便捷、安全的在线开发工具。
限界上下文 (Bounded Contexts)
┌─────────────────────────────────────────────────────────────┐
│ DevTools Platform │
├──────────────┬──────────────┬──────────────┬────────────────┤
│ 工具上下文 │ 分享上下文 │ 聊天上下文 │ 短链上下文 │
│ (Tool BC) │ (Share BC) │ (Chat BC) │ (ShortURL BC) │
├──────────────┼──────────────┼──────────────┼────────────────┤
│ - JsonTool │ - PasteBin │ - ChatRoom │ - ShortURL │
│ - DiffTool │ - PasteView │ - Message │ - Redirect │
│ - MarkdownTool│ │ - WebSocket │ - Stats │
│ - Base64Tool │ │ │ │
│ - UrlTool │ │ │ │
│ - TimestampTool│ │ │ │
│ - RegexTool │ │ │ │
│ - TextTool │ │ │ │
│ - MermaidTool│ │ │ │
│ - DnsTool │ │ │ │
└──────────────┴──────────────┴──────────────┴────────────────┘
聚合根 (Aggregate Roots)
| 上下文 | 聚合根 | 实体 | 值对象 |
|---|
| Share | Paste | - | ID, Content, Password, ExpiresAt |
| Chat | ChatRoom | Message | ID, Nickname, Password |
| ShortURL | ShortURL | - | ID, OriginalURL, Clicks |
开发流程 (Development Flow)
添加新的纯前端工具
-
创建 Vue 组件
frontend/src/views/{ToolName}Tool.vue
-
注册路由
{
path: '/{tool-name}',
name: '{ToolName}',
component: () => import('../views/{ToolName}Tool.vue'),
meta: { title: '工具名称', icon: 'IconName' }
}
-
组件模板
<template>
<div class="container mx-auto p-4 max-w-4xl">
<el-card>
<template #header>
<span class="text-xl font-bold">工具名称</span>
</template>
<!-- 工具内容 -->
</el-card>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { ElMessage } from 'element-plus'
// 状态和逻辑
</script>
添加需要后端的工具
遵循 分层架构:
┌─────────────────────────────────────────┐
│ Presentation Layer │
│ frontend/src/views/{Tool}Tool.vue │
├─────────────────────────────────────────┤
│ Application Layer │
│ backend/handlers/{tool}.go │
├─────────────────────────────────────────┤
│ Domain Layer │
│ backend/models/{tool}.go │
├─────────────────────────────────────────┤
│ Infrastructure Layer │
│ SQLite (models) + Middleware │
└─────────────────────────────────────────┘
步骤 1: 定义领域模型
package models
type {Tool} struct {
ID string `json:"id"`
CreatedAt time.Time `json:"created_at"`
CreatorIP string `json:"creator_ip"`
}
func (db *DB) Init{Tool}() error {
_, err := db.conn.Exec(`
CREATE TABLE IF NOT EXISTS {tools} (
id TEXT PRIMARY KEY,
-- ... 字段定义
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
creator_ip TEXT
);
`)
return err
}
func (db *DB) Create{Tool}(...) (*{Tool}, error) { }
func (db *DB) Get{Tool}(id string) (*{Tool}, error) { }
func (db *DB) Delete{Tool}(id string) error { }
func (db *DB) CleanExpired{Tool}s() error { }
步骤 2: 创建应用层处理器
package handlers
type {Tool}Handler struct {
db *models.DB
}
func New{Tool}Handler(db *models.DB) *{Tool}Handler {
return &{Tool}Handler{db: db}
}
type Create{Tool}Request struct {
}
type Create{Tool}Response struct {
}
func (h *{Tool}Handler) Create(c *gin.Context) {
}
步骤 3: 注册路由
if err := db.Init{Tool}(); err != nil {
log.Fatalf("{tool}数据库初始化失败: %v", err)
}
err = db.CleanExpired{Tool}s()
{tool}Handler := handlers.New{Tool}Handler(db)
{tool} := api.Group("/{tool}")
{
{tool}.POST("", createRateLimiter.Middleware(), {tool}Handler.Create)
{tool}.GET("/:id", {tool}Handler.Get)
}
步骤 4: 创建前端组件
参考"添加新的纯前端工具"部分。
代码规范 (Code Standards)
后端规范
-
错误处理: 使用统一的错误响应格式
c.JSON(http.StatusBadRequest, gin.H{"error": "错误信息"})
-
限流: 创建操作必须使用限流中间件
{tool}.POST("", createRateLimiter.Middleware(), handler.Create)
-
安全:
- 密码使用 SHA256 哈希
- 输入验证在 handler 层完成
- 敏感配置通过 config.yaml(不提交 git)
-
ID 生成: 使用 8 字符随机十六进制
bytes := make([]byte, 4)
rand.Read(bytes)
id := hex.EncodeToString(bytes)
前端规范
-
组件结构: 单文件组件,template-script-style 顺序
-
状态管理: 使用 ref() 和 reactive()
-
UI 框架: Element Plus + TailwindCSS
<el-card>
<div class="container mx-auto p-4">
-
图标: 使用 @element-plus/icons-vue
-
消息提示: 使用 ElMessage
ElMessage.success('操作成功')
ElMessage.error('操作失败')
API 设计原则
RESTful 约定
| 操作 | 方法 | 路径 | 说明 |
|---|
| 创建 | POST | /api/{resource} | 返回 201 Created |
| 获取 | GET | /api/{resource}/:id | 返回 200 OK |
| 列表 | GET | /api/{resource}s | 分页/过滤 |
| 更新 | PUT | /api/{resource}/:id | 返回 200 OK |
| 删除 | DELETE | /api/{resource}/:id | 返回 204 No Content |
响应格式
{
"id": "abc123",
"data": { ... }
}
{
"error": "错误描述信息"
}
配置管理
环境变量
| 变量 | 默认值 | 说明 |
|---|
| PORT | 8080 | 服务端口 |
| DB_PATH | ./data/paste.db | 数据库路径 |
| CONFIG_PATH | ./config.yaml | 配置文件路径 |
| GIN_MODE | release | Gin 模式 |
配置文件 (config.yaml)
shorturl:
password: ""
测试命令
cd backend
go mod tidy
go build .
go run main.go
cd frontend
npm install
npm run dev
npm run build
docker-compose up -d
docker-compose logs -f devtools
检查清单
添加新功能前确认: