第一章:项目概述与技术选型

博客v1.0系列教程(Csharp)博客 v1.0 系列教程 (C#)

1.1 项目背景

Blog v1.0 是一个基于 .NET 10 和 Vue 3 的全栈个人博客系统,灵感来源于即鹿无虞的设计理念 —— 在技术探索中懂得取舍,专注于核心功能。

本项目采用前后端分离架构,后端提供 RESTful API,前端使用 Vue 3 构建管理面板和博客前端。

1.2 技术选型

后端技术栈

| 技术 | 版本 | 用途 | |------|------|------| | .NET | 10.0 | 运行时 | | ASP.NET Core | 10.0 | Web 框架(Minimal API) | | SqlSugarCore | 5.1.4 | ORM | | PostgreSQL | 17 | 数据库 | | Redis | 7 | 缓存/黑名单 | | JWT Bearer | — | 认证 | | Serilog | — | 日志 | | HtmlAgilityPack | — | HTML 解析 | | ToolGood.Words | — | 敏感词过滤 | | BCrypt.Net | — | 密码哈希 |

前端技术栈

| 技术 | 版本 | 用途 | |------|------|------| | Vue | 3.5 | 前端框架 | | TypeScript | 6 | 类型安全 | | Element Plus | 2.14 | UI 组件库 | | Vite | 8 | 构建工具 | | Pinia | 3 | 状态管理 | | Vue Router | 5 | 路由 |

为什么选择这些技术?

SqlSugar ORM 提供了类似 MyBatis 的灵活性,同时保留了 LINQ 的强类型查询能力,支持多种数据库。

PostgreSQL 作为生产级数据库,提供 JSONB、全文搜索等强大功能。

Redis 用于 JWT Token 黑名单和热点数据缓存。

ToolGood.Words 基于 DFA 算法的敏感词过滤,性能优异。

1.3 总体架构

Blog.sln
├── Blog.Api        # API 层 — 路由、中间件、过滤器
├── Blog.Common     # 公共层 — 工具、错误码、Token、Redis
├── Blog.Core       # 核心层 — ORM 配置、仓储、工作单元
├── Blog.Domain     # 领域层 — 实体、DTO、枚举、配置
├── Blog.Services   # 服务层 — 业务逻辑
└── Blog.Vue        # 前端 — Vue 3 + Element Plus

分层职责

  • API 层:接收 HTTP 请求,调用服务层,返回响应
  • 服务层:业务逻辑编排,事务管理
  • 领域层:数据模型、DTO、枚举定义
  • 核心层:ORM 封装、仓储模式、工作单元
  • 公共层:跨层共享的工具和基础设施

1.4 核心功能模块

  1. 用户系统 — 注册、登录、JWT 认证、角色管理
  2. 文章系统 — CRUD、Markdown 渲染、标签分类
  3. 评论系统 — 嵌套回复、敏感词过滤、垃圾评分
  4. 分类管理 — 数据库分类 + 文件夹映射
  5. 收藏功能 — 收藏夹、文章收藏
  6. 站点配置 — 运行时编辑、JSON 持久化
  7. 文件上传 — 本地存储 + 七牛云
  8. 数据统计 — 仪表盘、文章趋势
  9. 日志系统 — 审计日志、操作日志

1.5 部署架构

Docker Compose
├── PostgreSQL 17    # 数据库
├── Redis 7          # 缓存
└── Elasticsearch    # 全文搜索(可选)

项目使用 Docker Compose 管理基础设施,后端通过 PublishSingleFile 发布为单文件可执行文件。

1.6 开发环境准备

# 1. 安装 .NET 10 SDK
# 2. 安装 Docker Desktop
# 3. 启动基础设施
docker-compose up -d postgres redis

# 4. 运行项目
cd Blog.Api
dotnet run

下一章我们将开始搭建项目结构和配置基础设施。

csharpdotnetblog架构