项目简介
什么是 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 将不同数据库的查询语法转换为统一的参数接口:
| 功能 | MongoDB | MariaDB | DoraCMS 统一接口 |
|---|---|---|---|
| 查询条件 | { 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 统一唯一性验证
- ✅ 跨数据库兼容
- ✅ 模块专用方法
- ✅ 自动排除更新项
技术栈
后端技术栈
| 技术 | 版本 | 说明 |
|---|---|---|
| EggJS | 3.x | 企业级 Node.js 框架 |
| MongoDB | 4.x+ | NoSQL 文档数据库 |
| Mongoose | 7.x | MongoDB ODM |
| MariaDB | 10.x+ | 关系型数据库 |
| Sequelize | 6.x | SQL ORM |
| JWT | - | 用户认证 |
| Redis | 5.x+ | 缓存(可选) |
前端技术栈
| 技术 | 版本 | 说明 |
|---|---|---|
| Vue | 3.x | 渐进式前端框架 |
| TypeScript | 5.x | 类型安全 |
| Vite | 6.x | 极速构建工具 |
| Element Plus | - | UI 组件库 |
| UnoCSS | - | 原子化 CSS |
| Pinia | - | 状态管理 |
| qiankun | - | 微前端框架 |
开发工具
| 工具 | 说明 |
|---|---|
| pnpm | Monorepo 包管理 |
| 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
- 🏗️ Repository 模式 - 深入理解核心设计
- 📚 三层架构 - 了解架构设计
- ⚡️ 双数据库支持 - 学习如何切换数据库
开源协议
DoraCMS 基于 MIT 协议 开源:
- ✅ 可免费用于商业项目
- ✅ 可自由修改和分发
- ✅ 需保留版权声明
- ✅ 作者不承担任何责任