Skip to content

项目简介

什么是 DoraCMS?

DoraCMS 是一个基于 EggJS 3.x + Vue 3 + TypeScript 的现代化内容管理系统,采用 pnpm monorepo 架构管理。它不仅仅是一个 CMS 系统,更是一个优秀的企业级应用架构实践。

💡 核心理念

通过 Repository/Adapter 设计模式实现数据库抽象层,让你的应用可以轻松在 MongoDB 和 MariaDB 之间切换,无需修改任何业务代码。

项目背景

在企业级应用开发中,我们经常面临以下挑战:

  • 数据库迁移困难 - 业务代码与数据库强耦合,切换数据库需要重写大量代码
  • 代码重复严重 - 每个模块都要写类似的 CRUD 操作,维护成本高
  • 异常处理不统一 - MongoDB 和 SQL 数据库的异常格式不同,处理逻辑分散
  • 开发效率低 - 没有统一的开发规范,新模块开发耗时长

DoraCMS 通过引入 Repository 模式Adapter 模式,完美解决了这些问题。

设计理念

1. Repository 模式 - 数据访问层抽象

Repository 模式将数据访问逻辑从业务逻辑中分离出来,提供统一的数据操作接口:

typescript
// MongoDB 和 MariaDB 使用完全相同的代码
const users = await this.userRepository.findMany({
  filters: { status: 'active' },
  populate: ['role'],
  sort: { createdAt: -1 },
  pagination: { page: 1, limit: 10 }
})

2. Adapter 模式 - 统一查询接口

通过 Adapter 将不同数据库的查询语法转换为统一的参数接口:

功能MongoDBMariaDBDoraCMS 统一接口
查询条件{ status: 'active' }{ where: { status: 'active' } }filters: { status: 'active' }
关联查询populate('role')include: [{ model: Role }]populate: ['role']
排序sort({ createdAt: -1 })order: [['createdAt', 'DESC']]sort: { createdAt: -1 }
字段选择select('name email')attributes: ['name', 'email']fields: ['name', 'email']

3. 三层架构 - 职责分离

清晰的三层架构设计,每层职责明确:

┌─────────────────────────────────────────────┐
│            Controller 层                     │
│  · 参数验证                                  │
│  · 请求响应                                  │
│  · 权限检查                                  │
└──────────────────┬──────────────────────────┘

┌──────────────────▼──────────────────────────┐
│            Service 层                        │
│  · 业务逻辑编排                              │
│  · 事务管理                                  │
│  · 跨模块调用                                │
└──────────────────┬──────────────────────────┘

┌──────────────────▼──────────────────────────┐
│         Repository 层                        │
│  · 数据库操作                                │
│  · 查询转换                                  │
│  · 异常处理                                  │
│  · 字段映射                                  │
└─────────────────────────────────────────────┘

核心特性

🗄️ 双数据库支持

  • ✅ 同时支持 MongoDB 和 MariaDB
  • ✅ 配置文件一行代码切换
  • ✅ 业务代码零修改
  • ✅ 统一的查询接口

🏗️ Repository 模式

  • ✅ 代码复用率 90%+
  • ✅ 基类封装所有常用操作
  • ✅ 支持自定义业务方法
  • ✅ 完善的钩子系统

⚡️ 开发效率

  • ✅ 标准化开发流程
  • ✅ 新模块开发 30 分钟完成
  • ✅ 自动字段检测
  • ✅ 智能更新策略

🛡️ 异常处理

  • ✅ 统一的异常体系
  • ✅ 自定义异常支持
  • ✅ 跨数据库异常统一
  • ✅ 清晰的错误信息

🎯 数据验证

  • ✅ UniqueChecker 统一唯一性验证
  • ✅ 跨数据库兼容
  • ✅ 模块专用方法
  • ✅ 自动排除更新项

技术栈

后端技术栈

技术版本说明
EggJS3.x企业级 Node.js 框架
MongoDB4.x+NoSQL 文档数据库
Mongoose7.xMongoDB ODM
MariaDB10.x+关系型数据库
Sequelize6.xSQL ORM
JWT-用户认证
Redis5.x+缓存(可选)

前端技术栈

技术版本说明
Vue3.x渐进式前端框架
TypeScript5.x类型安全
Vite6.x极速构建工具
Element Plus-UI 组件库
UnoCSS-原子化 CSS
Pinia-状态管理
qiankun-微前端框架

开发工具

工具说明
pnpmMonorepo 包管理
Docker容器化部署
ESLint代码质量检查
Prettier代码格式化

适用场景

DoraCMS 适用于以下场景:

✅ 企业官网

  • 内容管理
  • 新闻发布
  • 产品展示
  • SEO 优化

✅ 内容管理平台

  • 文章管理
  • 媒体管理
  • 用户管理
  • 权限控制

✅ 博客系统

  • 文章发布
  • 分类标签
  • 评论系统
  • 社交分享

✅ API 服务

  • RESTful API
  • GraphQL 支持(规划中)
  • Webhook
  • 第三方集成

✅ 微服务架构

  • 服务拆分
  • 数据库隔离
  • 独立部署
  • 灵活扩展

项目架构

整体结构

DoraCMS/
├── server/                # 后端服务
│   ├── app/
│   │   ├── controller/   # 控制器层
│   │   ├── service/      # 服务层
│   │   ├── repository/   # 仓储层 ⭐
│   │   ├── model/        # 数据模型
│   │   └── middleware/   # 中间件
│   ├── config/           # 配置文件
│   └── lib/              # 自定义框架

├── client/               # 前端应用
│   ├── admin-center/     # 管理后台
│   ├── user-center/      # 用户中心
│   └── remote-page/      # 微前端应用

└── docker/               # Docker 配置

Repository 层次结构

Repository 层次结构

├── IBaseRepository (接口层)
│   └── 定义标准接口

├── BaseStandardRepository (跨数据库基类)
│   ├── 通用 CRUD 操作
│   ├── 统一参数转换
│   ├── 异常处理
│   └── 钩子方法

├── BaseMongoRepository (MongoDB 专用基类)
│   ├── 继承 BaseStandardRepository
│   ├── MongoDB 特定实现
│   └── Mongoose 集成

├── BaseMariaRepository (MariaDB 专用基类)
│   ├── 继承 BaseStandardRepository
│   ├── MariaDB 特定实现
│   └── Sequelize 集成

└── 具体 Repository (业务实现)
    ├── UserMongoRepository
    ├── UserMariaRepository
    ├── ArticleMongoRepository
    └── ArticleMariaRepository

核心优势

📊 开发效率对比

指标传统开发DoraCMS
新模块开发时间2-4 小时30 分钟
代码复用率30-40%90%+
数据库切换成本重写所有查询配置一行代码
维护难度

💰 成本优势

  • 开发成本 ⬇️ 80% - 标准化流程,快速开发
  • 维护成本 ⬇️ 90% - 统一处理,易于维护
  • 学习成本 ⬇️ 70% - 清晰的架构,完善的文档
  • 迁移成本 ⬇️ 95% - 数据库切换无需改代码

🎯 质量保证

  • ✅ TypeScript 类型安全
  • ✅ 统一的异常处理
  • ✅ 完善的数据验证
  • ✅ 自动化测试支持

版本演进

v3.x (当前版本)

  • ✅ 完整的 Repository 模式实现
  • ✅ 双数据库支持(MongoDB + MariaDB)
  • ✅ Vue 3 + TypeScript 前端重构
  • ✅ 微前端架构支持
  • ✅ Docker 容器化部署

v2.x

  • EggJS 2.x
  • MongoDB 单数据库
  • Vue 2

v1.x

  • Express 框架
  • MongoDB
  • jQuery + Bootstrap

下一步

开源协议

DoraCMS 基于 MIT 协议 开源:

  • ✅ 可免费用于商业项目
  • ✅ 可自由修改和分发
  • ✅ 需保留版权声明
  • ✅ 作者不承担任何责任

社区与支持