# DarkM 系统架构总览
文档版本: 1.0
最后更新: 2022-03-01
# 📊 架构总览
DarkM 是一个基于 .NET Core 5.0 + Vue 2.6 的模块化快速开发平台,采用前后端分离架构,支持灵活组合和部署。
# 🏗️ 整体架构
┌─────────────────────────────────────────────────────────────────┐
│ 前端层 (Vue 2.6) │
├─────────────────────────────────────────────────────────────────┤
│ DarkM.UI │ 皮肤层 │ 业务 UI 模块 │ 微信小程序 │ 公众号 │
└─────────────────────────────────────────────────────────────────┘
↓ HTTP/WebSocket
┌─────────────────────────────────────────────────────────────────┐
│ 网关层 │
├─────────────────────────────────────────────────────────────────┤
│ 认证授权 │ 限流 │ 日志 │ Swagger │ CORS │ 代理 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 应用层 (ASP.NET Core) │
├─────────────────────────────────────────────────────────────────┤
│ Admin │ Common │ WorkFlow │ Order │ 业务 Controller │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 领域层 │
├─────────────────────────────────────────────────────────────────┤
│ 实体 (Entity) │ 仓储接口 (IRepository) │ 领域服务 │ DTO │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 基础设施层 │
├─────────────────────────────────────────────────────────────────┤
│ 仓储实现 │ 数据访问 (IDbSet) │ 缓存 │ 消息队列 │ 文件 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 数据层 │
├─────────────────────────────────────────────────────────────────┤
│ SqlServer │ MySql │ PostgreSQL │ SQLite │ Redis │
└─────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 🎯 核心设计理念
# 1. 模块化架构
理念: 约定优于配置,独立可组合
模块结构:
├── Application/ # 应用服务层(业务逻辑)
├── Domain/ # 领域层(实体、仓储接口)
├── Infrastructure/ # 基础设施层(仓储实现)
├── Quartz/ # 任务调度层
├── Web/ # 应用层(Controller)
└── WebHost/ # 启动器
1
2
3
4
5
6
7
2
3
4
5
6
7
优势:
- ✅ 代码复用
- ✅ 独立维护
- ✅ 灵活组合
- ✅ 团队协作
# 2. 依赖注入
理念: 控制反转,依赖抽象
// 接口定义
public interface IUserService { }
// 实现
public class UserService : IUserService { }
// 注册
services.AddSingleton<IUserService, UserService>();
// 使用
public class UserController : ModuleController
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
优势:
- ✅ 解耦
- ✅ 可测试
- ✅ 可替换
# 3. 仓储模式
理念: 数据访问抽象,业务与数据分离
// 仓储接口
public interface IUserRepository : IRepository<UserEntity>
{
Task<bool> ExistsAsync(string username);
}
// 仓储实现
public class UserRepository : RepositoryBase<UserEntity>, IUserRepository
{
public async Task<bool> ExistsAsync(string username)
{
return await DbSet.ExistsAsync(username);
}
}
// 使用
public class UserService : IUserService
{
private readonly IUserRepository _repository;
public UserService(IUserRepository repository)
{
_repository = repository;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
优势:
- ✅ 业务与数据分离
- ✅ 易于单元测试
- ✅ 易于切换数据源
# 4. 数据访问封装
理念: 基于 Dapper,解决 90% 数据库问题
// 注入 IDbSet
private readonly IDbSet<UserEntity> _dbSet;
// 单条操作
await _dbSet.InsertAsync(user);
await _dbSet.UpdateAsync(user);
await _dbSet.DeleteAsync(id);
// 批量操作
await _dbSet.BatchInsertAsync(users);
await _dbSet.BulkMergeAsync(users); // Upsert
// 查询
var user = await _dbSet.GetAsync(id);
var users = _dbSet.Find()
.Where(e => e.Status == 1)
.Page(1, 20)
.ToList();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
优势:
- ✅ 高性能(基于 Dapper)
- ✅ 简单易用
- ✅ 支持多种数据库
# 5. 启动器模式
理念: 统一入口,模块可插拔
启动器系统
├── 核心管理模块(认证/权限/导航)
├── Common(数据字典/地址)
├── Quartz(定时任务)
└── 业务模块(按需组合)
1
2
3
4
5
2
3
4
5
代表系统:
- StartNOA(NewOA 入口)
- JoyIn(公众号入口)
- EssentialOil(小程序入口)
- StartWechatMini(商城小程序入口)
优势:
- ✅ 快速构建新系统
- ✅ 统一认证授权
- ✅ 模块可插拔
# 📐 分层架构详解
# 前端层
技术栈: Vue 2.6 + Element UI + Vuex
组件:
- DarkM.UI - 前端核心框架
- 皮肤层 - Classics/Pithy
- 业务 UI 模块 - 各业务模块前端
- 微信小程序 - 小程序前端
- 公众号 - 微信 H5
职责:
- 用户界面展示
- 用户交互处理
- 前端数据验证
- API 调用
# 网关层
技术栈: ASP.NET Core Middleware
组件:
- 认证授权中间件
- 限流中间件
- 日志中间件
- Swagger 文档
- CORS 跨域
- 反向代理
职责:
- 请求过滤
- 身份验证
- 流量控制
- 日志记录
# 应用层
技术栈: ASP.NET Core WebAPI
组件:
- Admin 模块 - 权限管理
- Common 模块 - 公共服务
- WorkFlow 模块 - 流程引擎
- Order 模块 - 订单管理
- 业务 Controller
职责:
- HTTP 请求处理
- 参数验证
- 业务编排
- 响应返回
# 领域层
技术栈: .NET Core Class Library
组件:
- 实体 (Entity) - 业务对象
- 仓储接口 (IRepository) - 数据访问抽象
- 领域服务 - 核心业务逻辑
- DTO/ViewModel - 数据传输对象
职责:
- 业务建模
- 业务规则
- 领域逻辑
# 基础设施层
技术栈: .NET Core Class Library
组件:
- 仓储实现 - 数据访问实现
- 数据访问 (IDbSet) - ORM 封装
- 缓存 - Redis/MemoryCache
- 消息队列 - RabbitMQ/Kafka
- 文件存储 - 本地/OSS
职责:
- 数据持久化
- 缓存管理
- 消息处理
- 文件操作
# 数据层
技术栈: SqlServer/MySql/PostgreSQL/SQLite/Redis
组件:
- 关系型数据库 - 业务数据
- 缓存数据库 - 热点数据
- 文件存储 - 附件文件
职责:
- 数据存储
- 数据查询
- 数据备份
# 🔧 核心技术组件
# 1. DarkM 核心框架
功能:
- 依赖注入容器
- 配置管理
- 日志系统
- 异常处理
- 权限控制
技术:
- .NET Core 5.0
- ASP.NET Core
- Autofac/DI
# 2. 数据访问 (IDbSet)
功能:
- 基于 Dapper 的 ORM 封装
- 批量操作(BatchInsert/BulkMerge)
- 分表操作(按日/周/月/季/年)
- 数据迁移
支持的数据库:
- SqlServer
- MySql
- PostgreSQL
- SQLite
核心接口:
public interface IDbSet<TEntity>
{
// 新增
Task<bool> InsertAsync(TEntity entity);
Task<bool> BatchInsertAsync(List<TEntity> entities);
// 更新
Task<bool> UpdateAsync(TEntity entity);
Task<IResultModel<BulkMergeResult>> BulkMergeAsync(IEnumerable<TEntity> entities);
// 删除
Task<bool> DeleteAsync(dynamic id);
Task<bool> SoftDeleteAsync(dynamic id);
// 查询
Task<TEntity> GetAsync(dynamic id);
INetSqlQueryable<TEntity> Find(Expression<Func<TEntity, bool>> expression = null);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 3. 对象映射 (AutoMapper)
功能:
- Entity <-> DTO 转换
- Entity <-> ViewModel 转换
- 集合映射
- 嵌套对象映射
配置约定:
public class _MapperConfig : IMapperConfig
{
public void Bind(IMapperConfigurationExpression cfg)
{
cfg.CreateMap<UserAddModel, UserEntity>();
cfg.CreateMap<UserEntity, UserViewModel>();
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 4. 身份认证 (Auth)
认证方式:
- JWT(推荐)
- Basic
- Digest
- 第三方登录(微信/钉钉)
权限控制:
- RBAC 权限模型
- 权限编码:
Area_Controller_Action_HttpMethod - 数据权限(5 种数据范围)
核心接口:
public interface ILoginHandler
{
LoginResultModel Hand(IEnumerable<Claim> claims);
}
public interface IPermissionValidateHandler
{
Task<bool> ValidateAsync(string permissionCode, int accountId);
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 5. 缓存 (Cache)
支持的缓存提供器:
- MemoryCache(内存缓存)
- Redis(分布式缓存)
- Memcached(分布式缓存)
核心接口:
public interface ICacheHandler
{
Task<T> GetAsync<T>(string key);
Task<bool> SetAsync<T>(string key, T value, int expires);
Task<bool> RemoveAsync(string key);
bool LockTake(string key, string value, int expires);
bool LockRelease(string key, string value);
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
使用场景:
- 热点数据缓存
- 分布式锁
- 会话管理
- 计数器
# 6. 任务调度 (Quartz)
功能:
- 定时任务调度
- Cron 表达式
- 任务持久化
- 任务日志
- Web 控制台
核心接口:
public interface ITask
{
string Name { get; }
string Group { get; }
string Cron { get; }
Task Execute(ITaskExecutionContext context);
}
public abstract class TaskAbstract : ITask
{
// 生命周期方法
protected virtual Task OnExecuting() { }
protected virtual Task OnExecuted() { }
protected virtual Task OnError(Exception ex) { }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
使用场景:
- 定时数据同步
- 定时清理
- 定时报表
- 定时通知
# 7. 消息队列 (MQ)
支持的消息队列:
- RabbitMQ
- Kafka
- Azure Service Bus
- Memory(测试)
核心接口:
public interface IMessagePublisher
{
Task PublishAsync<T>(T message);
}
public interface IMessageSubscriber
{
Task SubscribeAsync<T>(Func<T, Task> handler);
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
使用场景:
- 异步处理
- 系统解耦
- 削峰填谷
- 事件驱动
# 8. Excel 导入导出
支持的 Excel 库:
- EPPlus(推荐)
- NPOI
- Aspose(商业)
核心接口:
public interface IExcelHandler
{
ExcelExportResultModel Export<T>(ExportModel model, IList<T> entities);
ExcelImportResultModel<T> Import<T>(ImportModel model, Stream excelFile);
}
1
2
3
4
5
2
3
4
5
功能:
- 单 Sheet/多 Sheet 导出
- Excel 导入验证
- 错误行定位
- 模板配置
# 🏢 业务系统架构
# NewOA 业务系统
NewOA 系统架构
│
├── StartNOA (启动器)
│ ├── 核心管理模块
│ ├── Common
│ └── Quartz
│
├── Recipients (内领系统)
│ ├── WorkFlow (审批流程)
│ ├── Order (订单管理)
│ └── Message (通知)
│
├── Holiday (休假管理)
│ └── WorkFlow
│
├── ComplaintOrder (客诉订单)
│ └── WorkFlow
│
├── Project (需求管理)
│ └── 需求跟踪
│
└── FixedAssets (资产管理)
└── 资产全生命周期
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 会员系统
会员系统架构
│
├── JoyIn (公众号)
│ ├── SNS (社交)
│ └── CRM (客户管理)
│
├── EssentialOil (小程序)
│ └── PageForm (页面配置)
│
├── StartEDW (数据仓库)
│ ├── doReport (报表)
│ └── doEDW (数据仓库)
│
├── doEvent (活动管理)
├── CRM (客户关系)
└── doReport (报表管理)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 商城系统
商城系统架构
│
├── doMall (数据桥接)
│ └── 新老系统数据同步
│
├── StartWechatMini (微信商城小程序)
│ ├── doEvent (活动)
│ ├── Message (通知)
│ ├── SNS (社交)
│ ├── PageForm (配置)
│ ├── MobileApp (APP 管理)
│ └── doTERRAConnector (第三方接口)
│
└── StartHWGWechatMini (海外购)
├── Message (通知)
├── SNS (社交)
├── PageForm (配置)
└── doTERRAConnector (海关/物流)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 🔐 安全架构
# 认证安全
- JWT Token 认证
- Token 刷新机制
- 密码加密(BCrypt)
- 多因素认证(可选)
# 授权安全
- RBAC 权限模型
- 数据权限控制
- 按钮级权限
- 接口级权限
# 数据安全
- SQL 注入防护(参数化查询)
- XSS 防护(输入过滤)
- CSRF 防护(Token 验证)
- 敏感数据加密
# 审计安全
- 操作日志记录
- 登录日志记录
- 数据变更追踪
- 异常监控告警
# 📊 部署架构
# 开发环境
┌──────────────┐
│ 开发机 │
│ ├─ Frontend │
│ ├─ Backend │
│ └─ Database │
└──────────────┘
1
2
3
4
5
6
2
3
4
5
6
# 测试环境
┌──────────────┐ ┌──────────────┐
│ 前端服务器 │ │ 后端服务器 │
│ (Nginx) │────▶│ (IIS/Kestrel)│
└──────────────┘ └──────────────┘
│
┌──────────────┐
│ 数据库集群 │
│ (主从复制) │
└──────────────┘
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 生产环境
┌──────────────┐ ┌──────────────┐
│ 负载均衡 │ │ 前端集群 │
│ (SLB) │────▶│ (Nginx × N) │
└──────────────┘ └──────────────┘
│
┌──────────────┐
│ 后端集群 │
│ (IIS × N) │
└──────────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 数据库主库 │ │ Redis 集群 │ │ 文件存储 │
│ (主从复制) │ │ (哨兵模式) │ │ (OSS) │
└──────────────┘ └──────────────┘ └──────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 🎯 技术选型理由
| 技术 | 选型理由 |
|---|---|
| .NET Core 5.0 | 跨平台、高性能、生态完善 |
| Vue 2.6 | 轻量、易学、组件丰富(计划升级 Vue 3) |
| Dapper | 轻量级 ORM、高性能、灵活 |
| AutoMapper | 对象映射标准库、配置简单 |
| Quartz.NET | 成熟的任务调度框架、功能完善 |
| FluentValidation | 链式 API、异步验证、易于测试 |
| Element UI | 组件丰富、文档完善、社区活跃 |
| Redis | 高性能、支持多种数据结构、持久化 |
# 📈 性能优化
# 数据库优化
- 索引优化
- 查询优化(避免 N+1)
- 分表分库
- 读写分离
# 缓存优化
- 热点数据缓存
- 缓存预热
- 缓存策略(Cache-Aside/Write-Through)
- 分布式锁
# 前端优化
- 资源压缩
- CDN 加速
- 懒加载
- 虚拟列表
# 后端优化
- 异步处理
- 批量操作
- 连接池
- 对象池
# 🔗 相关文档
文档维护: 随框架发展持续更新
最后更新: 2022-03-01