# 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

# 🎯 核心设计理念

# 1. 模块化架构

理念: 约定优于配置,独立可组合

模块结构:
├── Application/        # 应用服务层(业务逻辑)
├── Domain/            # 领域层(实体、仓储接口)
├── Infrastructure/    # 基础设施层(仓储实现)
├── Quartz/            # 任务调度层
├── Web/               # 应用层(Controller)
└── WebHost/           # 启动器
1
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

优势:

  • ✅ 解耦
  • ✅ 可测试
  • ✅ 可替换

# 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

优势:

  • ✅ 业务与数据分离
  • ✅ 易于单元测试
  • ✅ 易于切换数据源

# 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

优势:

  • ✅ 高性能(基于 Dapper)
  • ✅ 简单易用
  • ✅ 支持多种数据库

# 5. 启动器模式

理念: 统一入口,模块可插拔

启动器系统
├── 核心管理模块(认证/权限/导航)
├── Common(数据字典/地址)
├── Quartz(定时任务)
└── 业务模块(按需组合)
1
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

# 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

# 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

# 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

使用场景:

  • 热点数据缓存
  • 分布式锁
  • 会话管理
  • 计数器

# 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

使用场景:

  • 定时数据同步
  • 定时清理
  • 定时报表
  • 定时通知

# 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

使用场景:

  • 异步处理
  • 系统解耦
  • 削峰填谷
  • 事件驱动

# 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

功能:

  • 单 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

# 会员系统

会员系统架构
│
├── 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

# 商城系统

商城系统架构
│
├── 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

# 🔐 安全架构

# 认证安全

  • JWT Token 认证
  • Token 刷新机制
  • 密码加密(BCrypt)
  • 多因素认证(可选)

# 授权安全

  • RBAC 权限模型
  • 数据权限控制
  • 按钮级权限
  • 接口级权限

# 数据安全

  • SQL 注入防护(参数化查询)
  • XSS 防护(输入过滤)
  • CSRF 防护(Token 验证)
  • 敏感数据加密

# 审计安全

  • 操作日志记录
  • 登录日志记录
  • 数据变更追踪
  • 异常监控告警

# 📊 部署架构

# 开发环境

┌──────────────┐
│  开发机      │
│  ├─ Frontend │
│  ├─ Backend  │
│  └─ Database │
└──────────────┘
1
2
3
4
5
6

# 测试环境

┌──────────────┐     ┌──────────────┐
│  前端服务器   │     │  后端服务器   │
│  (Nginx)     │────▶│  (IIS/Kestrel)│
└──────────────┘     └──────────────┘
                            │
                     ┌──────────────┐
                     │  数据库集群   │
                     │  (主从复制)   │
                     └──────────────┘
1
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

# 🎯 技术选型理由

技术 选型理由
.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