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

Blazor Razor页面开发有哪些代码组织模式与最佳实践?

Blazor代码组织模式及最佳实践

Blazor 原生支持多种代码组织模式,既可以用示例中的单文件模式,也可以实现类似 MVC 的视图与逻辑分离,业内常用的实现方案如下:

1. 部分类(代码后置)方案

这是官方原生支持、最接近 MVC 分层逻辑的分离方案,无需额外依赖。
你可以为同一个 Razor 组件创建两个同名文件:

  • xxx.razor:仅存放 HTML、Razor 绑定语法,属于视图层
  • xxx.razor.cs:存放 C# 逻辑代码,定义为和组件类同名的 partial 类,编译时会和 razor 文件生成的类自动合并

示例:
Index.razor 内容:

<div class="text">@Sometext</div>

Index.razor.cs 内容:

public partial class Index
{
    public string Sometext { get; set; } = "text..";

    // 原@code块中的生命周期方法、事件处理逻辑都可以放在这里
    protected override void OnInitialized()
    {
        // 初始化逻辑
    }
}

样式也可以通过官方 CSS 隔离特性分离到独立的 Index.razor.css 文件中,避免全局样式污染。

2. 基类继承方案

适合多个组件存在公共UI层逻辑的场景,你可以定义继承自 ComponentBase 的基类,把公共逻辑放在基类中,Razor 组件通过 @inherits 指令继承基类即可直接使用基类的属性和方法。
示例基类代码:

public class ComponentBaseEx : ComponentBase
{
    [Inject] protected NavigationManager NavManager { get; set; }

    protected void NavigateToHome()
    {
        NavManager.NavigateTo("/");
    }
}

Razor 组件中使用:

@inherits ComponentBaseEx
<button @onclick="NavigateToHome">返回首页</button>

3. 服务层分离方案

也就是你当前正在使用的模式,把和UI无关的业务逻辑完全抽离到独立的服务类中,通过 Blazor 原生的依赖注入机制注入到组件中使用。
这种模式的优势是业务逻辑完全和组件解耦,既可以跨组件复用,也可以单独做单元测试,是中大型项目的首选方案。注意不要在服务类中编写组件UI相关的逻辑(比如调用StateHasChanged),这类逻辑保留在组件层处理即可。


最佳实践

  • 小型、逻辑简单的组件直接用单文件模式即可,无需强行分离,单文件的代码集中度更高,维护成本更低
  • 复杂页面、多人协作的项目优先使用部分类代码后置方案,视图和逻辑分离,前端和后端开发者可以独立维护对应文件
  • 业务逻辑优先抽离到服务层,不要在组件的C#代码中编写业务判断、数据处理等非UI逻辑
  • 公共的UI层通用逻辑抽离到组件基类,不要在多个组件中重复编写相同的UI处理代码
  • 所有样式优先使用CSS隔离的独立文件存放,不要在razor文件中内嵌<style>块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:42:03