Skip to content

OrientalGames-Studio/TMod.Blog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 

Repository files navigation

🧭 项目路线图:React-TS + .NET 8 + MSSQL + Redis 博客系统


🏗️ 阶段 1:项目初始化与架构搭建

目标: 建立基础架构与开发环境,确定整体项目结构。 周期建议:1 周

模块 关键任务 产出
🔧 后端初始化 1. 使用 dotnet new webapi 创建主项目。
2. 引入必要依赖:EF Core、Swashbuckle(Swagger)、AutoMapper、Serilog。
3. 按分层架构组织(Domain / Application / Infrastructure / API)。
可运行的 .NET8 Web API + Swagger 文档。
🧱 数据访问层 1. 连接 MSSQL。
2. 创建基础实体:Article、Category、Comment、User。
3. 配置 DbContext 与 Migration。
数据库结构 + 初始迁移。
📦 前端初始化 1. 使用 Vite + React + TypeScript 初始化前端项目。
2. 引入 React Router、Axios、Tailwind CSS。
3. 配置基本路由(Home / Categories / About / Admin)。
可运行的前端项目 + 路由框架。
⚙️ 环境配置 建立 .env 文件体系,区分 dev / prod。 环境配置标准化。

✍️ 阶段 2:后端核心模块开发

目标: 完成文章、分类、评论的基础 API,支持前端调用。 周期建议:2–3 周

模块 关键任务 产出
🧩 文章模块 1. ArticleController:CRUD 接口。
2. 支持 Markdown 字段。
3. EF Core + AutoMapper 实现 DTO。
/api/articles 全功能接口。
🧭 分类模块 1. CategoryController:查询分类与分类下文章。
2. 提供汇总信息(归档、数量)。
/api/categories 接口。
💬 评论模块 1. CommentController:游客评论(带邮箱/昵称)。
2. 审核与反垃圾机制(后续)。
/api/comments 接口。
👤 用户认证模块 1. 使用 JWT + ASP.NET Identity 实现单管理员登录。
2. 登录、刷新 Token、权限控制。
/api/auth 登录认证体系。
🧠 Minimal API 辅助端点 暴露少量管理工具端点(如:缓存清理、健康检查)。 /api/tools/* Minimal API。

🎨 阶段 3:前端核心模块开发

目标: 实现博客主要页面与数据绑定。 周期建议:3–4 周

模块 关键任务 产出
🏠 博客首页 1. 调用文章列表 API。
2. 模块化布局(日历、天气、归档、最新评论)。
3. 引入状态管理(Zustand 或 Redux Toolkit)。
首页完成。
🗂️ 分类页 1. 动态生成分类导航。
2. 展示该分类下的文章。
分类详情页完成。
🧑‍💼 关于页 静态内容 + 服务器信息(后端返回时间、版本、构建时间)。 关于页完成。
📄 文章详情页 1. Markdown 渲染。
2. 评论区。
3. 分享与收藏(Cookie 本地存储)。
文章页完成。

🧰 阶段 4:后台管理模块

目标: 构建管理员专用后台,实现博客管理能力。 周期建议:3–4 周

模块 关键任务 产出
📝 博文管理 1. 在线 Markdown 编辑器。
2. 文件上传(md/txt/doc/docx)。
3. 文章隐藏、封禁、删除。
可用的文章管理页。
🎛️ 系统管理 1. “维护模式” 开关。
2. 一键主题切换(深色/节日主题)。
3. 附件管理、上传日志。
管理仪表盘完成。
🔑 管理端安全 1. 前端路由保护。
2. 管理端部署独立域名(如 admin.myblog.com)。
独立可访问管理端。

阶段 5:性能优化与扩展功能

目标: 提升响应速度与系统稳定性。 周期建议:2–3 周

模块 关键任务 产出
🧩 Redis 缓存 1. 缓存首页文章列表、热门文章、统计信息。
2. 添加缓存中间件与失效机制。
Redis 缓存系统。
🔍 Elasticsearch 搜索 1. 同步文章数据到 ES。
2. 提供搜索接口 + 前端搜索框。
全文搜索功能。
🔄 博文同步服务 1. 构建后台 Worker(Hangfire 或 BackgroundService)。
2. 实现同步微信公众号 / CSDN 的最小版本。
自动同步后台任务。

🧱 阶段 6:自动化与部署

目标: 将系统上线并建立可持续部署机制。 周期建议:1–2 周

模块 关键任务 产出
🐳 容器化 1. 为前后端各写 Dockerfile。
2. 使用 Docker Compose 统一编排。
一键启动的本地容器环境。
☁️ 部署 1. 配置生产数据库 / Redis / Nginx 反向代理。
2. 启用 HTTPS。
线上可访问网站。
🔔 CI/CD 1. GitHub Actions 或 Azure DevOps 自动构建。
2. 自动注入版本号与构建时间(前后端)。
自动化构建与版本信息。

🧠 阶段 7:维护与演进

目标: 提升系统稳定性与可维护性。 持续进行

模块 关键任务 产出
🧩 日志与监控 Serilog + Seq / Elastic APM 监控运行状况。 可视化监控仪表盘。
🧹 优化与重构 定期代码审查、升级依赖、优化性能。 稳定的长期版本。
🧑‍🏫 文档维护 编写开发手册、部署文档、API 文档。 完整文档体系。

后期待办(阶段性评审)

为推进项目完整性与可落地性,下面将阶段性评审的结果整理为后期待办(已按优先级排列)。该改动为单文件小改动,跳过单独计划。

  1. 紧急修复(现在)(Pending)
  • 修复 UnitOfWork 构造与 Dispose / 事务生命周期,实现或支持 IAsyncDisposable,确保能通过构建并避免资源泄露。
  • 修复 PackResultMiddleware:在所有分支恢复 HttpContext.Response.Body;保留或携带原始 HTTP StatusCode;不要将内部异常详情(ex.Message/堆栈)回传给客户端;对于大文件/流式响应和非 application/json 类型跳过包装以避免内存压力与语义破坏。
  1. 近期(1–2 周)(Pending)
  • 审查并修正 AutoMapper 配置,确保敏感字段(如密码/密钥)不被映射至 DTO;统一 DateTime 时区/Kind 处理策略。
  • 短码(IShortCodeService)安全:将密钥存放在安全存储(UserSecrets/KeyVault),在生成时进行唯一性检测并实现有限重试策略以避免碰撞。
  • 评论/输入安全:对 Markdown/HTML 渲染做 XSS 过滤或白名单 Sanitizer;为公开评论加速率限制与反垃圾机制(简单 CAPTCHA 或 IP 限制)。
  1. 中期(2–4 周)
  • 添加单元测试与集成测试:覆盖中间件(JSON 包装/非 JSON/状态码)、UnitOfWork 事务、仓储分页与短码 encode/decode 边界。
  • 引入 Redis 缓存关键视图/API(首页、热门文章、统计)并实现缓存失效策略与穿透保护;优化 EF 查询(AsNoTracking()、投影、避免 N+1)并建议必要的 DB 索引。
  • 分页接口改进:分页方法应返回包含 totalCount 的分页结果对象,便于前端分页控件使用。
  1. 长期(上线前)
  • 完整安全审计:依赖漏洞扫描、密钥与配置管理、CSP/CORS 策略、Token 撤销与会话管理。
  • 性能调优与监控:索引优化、压力测试、APM(如 Elastic APM / Application Insights)、日志聚合与告警策略。

当前重点

  • 优先完成“紧急修复”以保证项目能编译并通过本地验证(UnitOfWork 与 PackResultMiddleware 为首要);随后补充测试覆盖防止回归,再推进缓存、CI 与部署准备工作。

2026-01-14 补充

上线时记得同步数据库 UDF

  1. 启用 clr 程序集
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
  1. 信任程序集
exec sp_add_trusted_assembly
  @hash = -- 计算最新的 TMod.Blog.Extensions.DBFunctions 的 Hash 值,
  @description = N'扩展方法'
  1. 删除然后重建程序集
create assembly [TMod.Blog.Extensions.DBFunctions]
from N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER_2022\MSSQL\External_Assemblies\TMod.Blog.Extensions.DBFunctions.dll'
with permission_set = safe;
  1. 创建 UDF
create function dbo.UDF_GetSimilarity(
	@s1 nvarchar(max),
	@s2 nvarchar(max),
	@weight1 float,
	@weight2 float
)
returns float
as external name [TMod.Blog.Extensions.DBFunctions].[TMod.Blog.Extensions.DBFunctions.StringExtensionDBFunctions].[GetSimilarity];


create function dbo.UDF_IsSimilarTo(
	@s1 nvarchar(max),
	@s2 nvarchar(max),
	@threshold float
)
returns bit
as external name [TMod.Blog.Extensions.DBFunctions].[TMod.Blog.Extensions.DBFunctions.StringExtensionDBFunctions].[IsSimilarTo]

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages