.NET8 Blazor Server + BootstrapBlazor + PostgreSQL + Identity,同时兼容后续小程序 API复用业务代码,完全解耦

.NET8 Blazor Server + BootstrapBlazor + PostgreSQL + Identity,同时兼容后续小程序 API复用业务代码,完全解耦

芯宇宙技术社
2026-07-29 / 0 评论 / 1 阅读 / 正在检测是否收录...

一、整体解决方案项目总览
基于DDD 领域驱动设计分层架构,技术栈:.NET8 + Blazor Server + BootstrapBlazor + PostgreSQL + AspNetCore Identity + Redis缓存,支持后台管理、微信小程序 API 业务代码完全复用,低耦合易扩展。
plaintext
ERP.Solution
├─ 1. ERP.Domain.Shared # 领域共享层(最底层,无外部依赖)
├─ 2. ERP.Application # 应用业务逻辑层
├─ 3. ERP.Infrastructure # 基础设施实现层
├─ 4. ERP.Web.Server # Blazor Server后台管理端(BootstrapBlazor)
├─ 5. ERP.Web.Api # 小程序/移动端接口项目(可选扩展)

测试项目

├─ ERP.UnitTest # 单元测试(领域、应用层逻辑)
└─ ERP.IntegrationTest # 集成测试(数据库完整流程)
二、各分层完整目录、职责、依赖关系

  1. ERP.Domain.Shared 领域共享层
    定位:整个解决方案最底层,仅存放纯粹业务定义,无数据库、UI、第三方 SDK 依赖,所有上层项目统一引用复用。
    项目依赖:无任何内部项目引用
    plaintext
    ERP.Domain.Shared
    ├─ Entities # 数据库实体(PG表对应实体)
    │ ├─ Goods.cs
    │ ├─ Stock.cs
    │ ├─ SaleOrder.cs
    │ ├─ PurchaseOrder.cs
    │ ├─ Customer.cs
    │ └─ Supplier.cs
    ├─ Abstractions # 抽象接口:仓储、领域服务(仅定义,不实现)
    │ ├─ IStockRepository.cs
    │ ├─ ISaleOrderRepository.cs
    │ ├─ IPurchaseRepository.cs
    │ └─ IUserRepository.cs
    ├─ Dtos # 全局传输对象(入参/返回值,前后端、小程序通用)
    │ ├─ Stock
    │ │ ├─ StockQueryDto.cs
    │ │ └─ StockResultDto.cs
    │ ├─ Sale
    │ │ ├─ SaleCreateDto.cs
    │ │ └─ SaleListDto.cs
    │ └─ Purchase
    │ ├─ PurchaseInDto.cs
    │ └─ PurchaseResultDto.cs
    ├─ Enums # 业务枚举:单据状态、库存变动类型、订单来源
    │ ├─ OrderStatus.cs
    │ └─ StockChangeType.cs
    ├─ DomainServices # 纯领域计算逻辑(无DB依赖,单元测试核心)
    │ └─ StockCalculateService.cs # 库存扣减、加权平均成本计算
    └─ Common # 全局通用工具、统一返回模型
    ├─ ApiResult.cs # 全局接口统一返回格式
    └─ ConstConfig.cs # 业务常量
  2. ERP.Application 应用业务逻辑层
    定位:封装全部业务流程,Blazor 后台、小程序 API 统一调用此层,业务代码仅编写一次,实现代码复用。
    项目依赖:仅引用 ERP.Domain.Shared
    plaintext
    ERP.Application
    ├─ Abstractions # 应用服务抽象接口
    │ ├─ IStockAppService.cs
    │ ├─ ISaleAppService.cs
    │ ├─ IPurchaseAppService.cs
    │ └─ IAuthAppService.cs # 登录、注册、权限校验业务接口
    ├─ Services # 应用服务接口实现
    │ ├─ Stock
    │ │ └─ StockAppService.cs
    │ ├─ Sale
    │ │ └─ SaleAppService.cs
    │ ├─ Purchase
    │ │ └─ PurchaseAppService.cs
    │ └─ Auth
    │ ├─ AuthAppService.cs
    │ └─ AuthHelper.cs # 账号密码、JWT工具封装
    └─ Common
    └─ ServiceBase.cs # 应用服务基类,封装公共方法
  3. ERP.Infrastructure 基础设施层
    定位:所有外部依赖的实现层,隔离数据库、缓存、第三方 SDK,上层业务仅依赖抽象接口,不感知具体实现。
    项目依赖:引用 ERP.Domain.Shared + ERP.Application
    plaintext
    ERP.Infrastructure
    ├─ Data
    │ ├─ AppDbContext.cs # PostgreSQL EF Core数据库上下文
    │ ├─ Migrations # EF数据库迁移文件
    │ └─ SeedData # 系统初始化种子数据(管理员账号、商品分类)
    ├─ Repositories # 仓储接口实现,实现Domain层IxxxRepository
    │ ├─ StockRepository.cs
    │ ├─ SaleOrderRepository.cs
    │ ├─ PurchaseRepository.cs
    │ └─ UserRepository.cs
    ├─ Identity # AspNetCore Identity 用户角色扩展
    │ └─ AppUser.cs
    ├─ Cache # Redis缓存实现(库存缓存、基础数据缓存)
    │ └─ RedisCacheService.cs
    └─ ExternalServices # 第三方外部服务对接
    ├─ WeChatMini # 微信小程序SDK(登录、支付)
    └─ ExcelExport # Excel单据导出工具类
  4. ERP.Web.Server Blazor Server 后台管理端
    定位:企业后台管理系统,基于 BootstrapBlazor 组件库,提供完整进销存可视化页面、权限管理。
    项目依赖:引用 ERP.Domain.Shared + ERP.Application + ERP.Infrastructure
    plaintext
    ERP.Web.Server
    ├─ Components # 页面、公共组件(Blazor核心目录)
    │ ├─ Pages # 所有业务页面
    │ │ ├─ Account # 账号相关页面
    │ │ │ ├─ Login.razor
    │ │ │ └─ Register.razor
    │ │ ├─ Stock # 库存管理页面
    │ │ │ ├─ StockIndex.razor
    │ │ │ └─ StockWarning.razor
    │ │ ├─ Sale # 销售开单、销售记录
    │ │ ├─ Purchase # 采购入库、采购单据
    │ │ ├─ CustomerSupplier # 客户、供应商档案管理
    │ │ └─ System # 系统设置、角色权限、参数配置
    │ ├─ Layouts # 全局布局母版
    │ │ ├─ MainLayout.razor # 后台主布局(侧边栏菜单+顶部导航)
    │ │ ├─ LoginLayout.razor # 登录页面独立布局
    │ │ └─ AuthorizeLayout.razor # 全局权限拦截布局
    │ ├─ Shared # 全局复用弹窗、公共组件
    │ │ ├─ StockDialog.razor
    │ │ └─ SaleOrderDialog.razor
    │ └─ App.razor # 全局外壳,内置BootstrapBlazorRoot根组件
    ├─ wwwroot # 静态资源文件(仅Web.Server存放静态资源)
    │ ├─ css # 编译后样式文件
    │ ├─ scss # 原始SCSS样式源码
    │ ├─ images # 图片资源
    │ │ ├─ bg # 页面背景图
    │ │ └─ icon # 功能图标
    │ └─ js # 自定义JS脚本
    ├─ Services # Blazor页面专属辅助服务
    │ └─ GlobalStateService.cs # 全局登录用户状态管理
    └─ Program.cs # 项目入口:DI依赖注入、中间件、BootstrapBlazor配置
  5. ERP.Web.Api 小程序 / 移动端接口项目(可选)
    定位:对外提供 RESTful 接口,供微信小程序、APP、H5 调用,底层完全复用 Domain、Application、Infrastructure,无需重复编写业务逻辑。
    项目依赖:引用 ERP.Domain.Shared + ERP.Application + ERP.Infrastructure
    plaintext
    ERP.Web.Api
    ├─ Controllers
    │ ├─ MiniProgramController.cs # 小程序登录、商品查询、下单接口
    │ └─ StockController.cs
    └─ Program.cs # API项目DI、中间件、JWT鉴权配置
    三、测试项目目录
  6. ERP.UnitTest 单元测试
    仅测试领域层、应用层纯逻辑,使用 Moq 模拟仓储,无需真实数据库。
    plaintext
    ERP.UnitTest
    ├─ DomainTests # 领域逻辑测试(库存加权成本计算)
    └─ ApplicationTests # 应用服务业务流程测试(销售、采购、登录逻辑)
  7. ERP.IntegrationTest 集成测试
    使用内存数据库完成完整链路测试,验证仓储、数据库、业务流程联动。
    plaintext
    ERP.IntegrationTest
    ├─ Factory # TestServer测试工厂,统一构建测试服务容器
    └─ BusinessTests # 完整业务流程集成测试(采购入库、销售出库全链路)
    四、项目依赖单向约束(禁止反向依赖)
    markdown
  8. ERP.Domain.Shared:无内部项目引用(最底层)
  9. ERP.Application:仅引用 ERP.Domain.Shared
  10. ERP.Infrastructure:引用 ERP.Domain.Shared + ERP.Application
  11. ERP.Web.Server / ERP.Web.Api:引用全部下层三层
  12. 测试项目:引用 ERP.Domain.Shared + ERP.Application + ERP.Infrastructure
    五、分层架构核心优势
    业务代码完全复用
    库存、销售、账号登录逻辑仅编写一次,Blazor 后台、微信小程序 API 同步复用,无重复代码,降低维护成本。
    职责单一,分层解耦
    数据库操作仅在 Infrastructure;
    业务流程、业务规则仅在 Application/Domain;
    UI 页面、交互逻辑仅在 Blazor Web 项目。
    单元测试友好
    Domain、Application 层无数据库、UI 强耦合依赖,可快速编写单元测试,覆盖库存计算、单据核心业务逻辑。
    横向扩展能力强
    后续新增 APP、H5、第三方对接接口,仅需新建 WebApi 项目,底层领域、业务、基础设施代码无需改动。
    完美适配 BootstrapBlazor
    所有页面、布局、弹窗组件统一规范存放,静态资源集中管理,适配 Blazor Server 组件化开发模式。
    六、开发规范 & 避坑清单
    禁止在 Blazor 页面直接编写库存计算、单据业务逻辑,全部抽离至 Application 应用服务;
    禁止页面直接操作 DbContext 数据库上下文,所有数据操作通过 Domain 层仓储接口完成;
    数据库实体统一存放于 Domain.Shared,Web/Api 项目禁止重复定义实体类;
    图片、样式、JS 静态资源仅允许放置在 ERP.Web.Server/wwwroot,其他项目不存放静态资源;
    所有入参、返回 DTO 统一在 Domain.Shared 定义,后台页面、小程序接口共用一套传输模型;
    外部第三方依赖(数据库、Redis、微信 SDK)全部封装在 Infrastructure 层,上层业务仅依赖抽象接口。
0

评论 (0)

取消