You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于.NET Clean Architecture添加Blazor Server项目的最佳实践咨询

最优实现方案:扩展现有解决方案,拆分独立核心类库

核心思路就是基于你现有的Clean Architecture结构,把Domain、Application、Infrastructure这三层抽成独立的类库项目,让WebApi和Blazor Server都作为UI层依赖这些核心类库——既不会出现业务逻辑耦合、引入WebApi专属包的问题,也能避免实体和DbContext重复的麻烦。

具体操作步骤

  • 重构现有解决方案结构
    把原WebApi项目里的Domain、Application、Infrastructure层,分别拆成独立的类库(比如YourProject.Domain、YourProject.Application、YourProject.Infrastructure)。注意控制各层的依赖:
    • Domain层只放实体、领域服务、值对象这类核心业务定义,只依赖基础类库(比如System.ComponentModel.Annotations),别加任何业务框架包
    • Application层依赖Domain层,放MediatR的Handlers、DTO、业务接口,绝不引入WebApi专属的包(比如Microsoft.AspNetCore.Mvc)
    • Infrastructure层依赖Application和Domain层,负责DbContext、EF迁移、仓储实现,只在这里引入EF Core相关包
  • 加入Blazor Server项目
    直接把Blazor Server加到现有解决方案里,作为独立的UI层。它只需要依赖Application层,通过依赖注入调用业务逻辑就行,不用直接碰Infrastructure层。在Blazor的Program.cs里配置DI,注册DbContext、仓储这些服务,和WebApi的配置逻辑保持一致就行。
  • 统一管理EF迁移
    迁移文件就放在Infrastructure层里,毕竟这是数据访问实现的地方。执行迁移命令时,指定Infrastructure为项目、WebApi为启动项目(因为它是现有稳定项目):
    Add-Migration InitialCreate -Project YourProject.Infrastructure -StartupProject YourProject.WebApi
    Update-Database -Project YourProject.Infrastructure -StartupProject YourProject.WebApi
    
  • 避免UI层耦合的细节
    WebApi专属的NuGet包只留在WebApi项目里,别往核心类库塞;Blazor的组件、路由这些UI逻辑完全独立,核心类库碰都别碰UI代码。如果两者有共用的DTO,就放到Application层的Contracts文件夹里,省得重复定义。

为什么不选单独解决方案?

单独建解决方案会导致Domain实体、DbContext重复,后续维护时要同步两处代码,很容易出不一致的问题,而且迁移文件的管理会乱成一锅粥,完全不符合单体架构统一维护的需求。

额外优化点

  • 可以整个YourProject.Shared类库,放WebApi和Blazor共用的工具类、枚举,进一步减少重复代码
  • 坚持依赖倒置原则,让UI层只依赖Application层的接口,不碰具体实现,留好后续扩展的空间

内容的提问来源于stack exchange,提问作者pietro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:24:45