跳转到内容

系统架构

XiHan.BasicApp 采用前后端分离。后端按框架层 → 模块层 → 主应用层组织,每个业务模块内部遵循 DDD 分层(Domain / Application / Infrastructure)。

后端分层

text
┌─────────────────────────────────────────────────────────────┐
│                   XiHan.BasicApp.WebHost                      │
│                   (启动入口与模块聚合)                          │
├──────────────────────────────┬──────────────────────────────┤
│  XiHan.BasicApp.Saas         │  XiHan.BasicApp.CodeGeneration│
│  (RBAC / 多租户 / 审计)       │  (代码生成与模板管理)           │
├──────────────────────────────┴──────────────────────────────┤
│                   XiHan.BasicApp.Web.Core                     │
│              (Web 核心能力 / 动态 API / 网关 / 灰度)            │
├─────────────────────────────────────────────────────────────┤
│                     XiHan.BasicApp.Core                       │
│               (基础应用能力 / DDD / CQRS / 模块化)             │
├─────────────────────────────────────────────────────────────┤
│                      XiHan.Framework.*                        │
│      底层框架(认证 / 授权 / 数据 / 缓存 / 事件总线 / 多租户)     │
└─────────────────────────────────────────────────────────────┘
项目说明
XiHan.BasicApp.Core基础应用能力,集成 DDD / CQRS / 事件总线 / 认证 / 授权 / 缓存 / 多租户
XiHan.BasicApp.Web.CoreWeb 核心能力,动态 API / Scalar / SignalR / 网关 / 灰度路由
XiHan.BasicApp.Saas核心业务模块:用户 / 角色 / 权限 / 菜单 / 部门 / 租户 / 配置 / 字典 / 文件 / 通知 / 日志 / 任务
XiHan.BasicApp.CodeGeneration代码生成:数据源管理 / 表结构导入 / 模板配置 / 全栈生成
XiHan.BasicApp.WebHost启动入口,聚合所有模块

SaasCodeGeneration 都是一等业务模块,各自独立成项目、经 [DependsOn] 挂载到 WebHost。这也是你新增一个大功能域时的推荐范式:新建独立模块项目,而非往 Saas 里塞切片。

目录结构

text
XiHan.BasicApp/
├── backend/                 # 后端(.NET 10)
│   ├── src/
│   │   ├── framework/       #   Core / Web.Core 基础能力
│   │   ├── modules/         #   Saas、CodeGeneration 模块
│   │   └── main/            #   WebHost 启动入口
│   ├── props/               #   共享 MSBuild 属性
│   ├── scripts/             #   部署与运维脚本
│   └── test/                #   测试项目
├── frontend/                # 前端(Vue 3 + Naive UI)
│   ├── src/                 #   应用源码
│   └── packages/            #   内部包
└── assets/                  # README 资源

后端如何暴露接口

BasicApp 用 XiHan.Framework 的动态 API应用服务经 [DynamicApi] 直接暴露为 REST 接口,没有 Controller 样板,Scalar 文档自动生成。

请求进来后会经过框架 Web.Api 的中间件管道:TraceId → 请求文化 → 认证 → 租户解析 → 授权 → 端点,因此每个请求天然带上租户上下文与权限判定。

菜单也是后端驱动的:后端 PageRegistry 作为单一事实源,统一注册菜单、路由、组件路径、权限码与国际化键,前端据此渲染。

前端结构

前端是 Vue 3 + TypeScript + Naive UI 的中后台应用,几个关键设计:

  • Schema 驱动列表页:搜索 / 表格 / 导出由一份 Schema 配置生成,内置列设置、密度切换、高级搜索、个人视图保存、树形模式、列宽拖拽
  • 三级权限过滤:页面、字段、操作三级按权限码过滤,字段级脱敏;列设置与搜索偏好同步到后端,多端一致
  • 状态管理:Pinia;国际化:vue-i18n;样式:Tailwind CSS 4 + Naive UI

前后端协作数据流

text
Vue 页面 (Schema 配置)
   │  发起请求(POST 分页约定,带 X-Language / X-Timezone 头)

动态 API(应用服务方法)
   │  经中间件管道:认证 → 租户解析 → 授权 → 字段级脱敏

应用服务 (CQRS) → 仓储 (SqlSugar) → PostgreSQL

   └─ 写路径精准失效分布式缓存(授权快照 / 菜单 / 配置 / 字典)

下一步

Released under The MIT License.