Blazor流程编排的艺术:深入Z.Blazor.Diagrams库的使用与实践

news/2024/10/10 3:22:30

        为现代网页应用开发提供动力的其中一个重要方面就是前端框架的强大功能与灵活性。而在.NET生态中,Blazor以其独特的工作方式和优势逐渐获得了开发者们的青睐。今天,在这篇文章中,我将带你深入探索一个基于Blazor的优秀库——Z.Blazor.Diagrams,我们将了解它是如何帮助开发者轻松实现流程编排的。

https://github.com/Blazor-Diagrams/Blazor.Diagrams

Z.Blazor.Diagrams浅析及应用实践

        最近,当我推进一个基于LLM的流程编排项目时,我需要为Blazor应用寻找一个强大的流程编排组件。在一番寻找之后,我发现了Z.Blazor.Diagrams这个库。

        Z.Blazor.Diagrams是一款适用于Blazor(服务器端和WASM客户端)的完全可定制和可扩展的通用图形库。这个库最初受到了React生态中流行库React图的启发,并在此基础上发展壮大。开发者可以利用ZBD创建具有自定义设计的高级图表,并根据个人的需求调节库的行为特性。

        你可以通过官方的文档来了解其更多信息,相信我,官方的示例将给你留下深刻的印象。

https://blazor-diagrams.zhaytam.com/

  

        接下来,让我们一起走进ZBD世界,探究它的魅力所在。

 

初始化设置

        首先,让我们来准备好我们的开发环境。引入ZBD到项目中你需要在你的.csproj文件中添加下面的nuget包:

<PackageReference Include="Z.Blazor.Diagrams" Version="3.0.2" />
<PackageReference Include="Z.Blazor.Diagrams.Core" Version="3.0.2" />
<PackageReference Include="Z.Blazor.Diagrams.Algorithms" Version="3.0.2" />

  

        确保完成包的引入后,我们就可以开始踏上创建用户界面的旅程了。

 
构建流程图

        流程图的构建过程非常直观,接下来我将向您展示如何在您的razor页面中使用DiagramCanvas控件来实现这一点。

<div class="wrapper"><Content><CascadingValue Value="BlazorDiagram"><div class="diagram-container"><DiagramCanvas><Widgets><NavigatorWidget Width="200"Height="150"Style="position: absolute; bottom: 15px; right: 15px;"></NavigatorWidget></Widgets></DiagramCanvas></div></CascadingValue></Content>
</div>

  

        如你所见,一旦配置好DiagramCanvas控件,基本的流程图界面就已经搭建好了。

 

节点定制与交互

        在ZBD中,定制节点是一项核心功能,这允许我们创建符合我们流程特色的节点。下面是如何在我们的应用中注册自定义节点:

[Inject] protected MessageService? Message { get; set; }protected override async Task OnInitializedAsync()
{await base.OnInitializedAsync();BlazorDiagram.RegisterComponent<StartNode, StartComponent>();BlazorDiagram.RegisterComponent<EndNode, EndComponent>();BlazorDiagram.RegisterComponent<AppNode, AppComponent>();var startNode = BlazorDiagram.Nodes.Add(new StartNode(new Point(80, 80)));startNode.AddPort(PortAlignment.Right);var endNode = BlazorDiagram.Nodes.Add(new EndNode(new Point(980, 80)));endNode.AddPort(PortAlignment.Left);var appNode = BlazorDiagram.Nodes.Add(new AppNode(new Point(450, 80)));appNode.AddPort(PortAlignment.Left);appNode.AddPort(PortAlignment.Right);BlazorDiagram.Links.Add(new LinkModel(startNode.Ports[0], appNode.Ports[0]));
}

          在进行节点注册后,我们可以定义每种类型节点的外观和行为。这里是一个简单的开始节点组件示例:

@using Blazor.Diagrams.Components.Renderers;
@using AntSK.Pages.Workflow.Node;<div><Card Size="small" TitleTemplate="titleTemplate" Style="width:300px;"><Body><p>开始</p></Body></Card>@foreach (var port in Node.Ports){// In case you have any ports to show// IMPORTANT: You are always in charge of rendering ports<PortRenderer @key="port" Port="port" />}
</div>@code {[Parameter] public StartNode Node { get; set; } = null!;RenderFragment titleTemplate =@<div><Icon Type="play-circle" Theme="outline" />用户问题(对话入口)</div>;
}public class StartNode : NodeModel
{public StartNode(Point position = null) : base(position) {}
}

  

        这段代码将会创建一个简约的“开始”节点,配合我们的样式和业务逻辑,你可以创建很多个性化的节点类型来满足实际项目需要。

查看效果

        成功定义节点和链接之后,我们便可以在浏览器中观察到我们的流程编排图。

 

总结

        至此,我们已经概览了Z.Blazor.Diagrams的核心特性和实用性。从灵活的定制设计到流畅的用户交互,ZBD无疑是开发基于Blazor应用的流程图的优选方案。结合自定义组件和算法包的能力,开发者能够以最少的代码实现最丰富的前端功能表现。

        不论你是对Blazor感兴趣的新手,还是希望为你的项目寻找更多可能性的资深开发者,我相信Z.Blazor.Diagrams能为你打开一扇通往高效、可扩展前端编程的大门。别忘了,探索技术的旅途从来不会孤单,我们一路并肩前行。

        未来已来,让我们拭目以待。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/27795.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【未整合】数学 day4.2

博弈论 Nim游戏 对于 \(n=2\),\(a_1=a_2\),后手可以“模仿”先手,使得后手必胜。 对于 \(a_1\ne a_2\),先手可以让自己进入“模仿期”,使得先手必胜。 结论:若 \(\oplus a_i=0\),先手必败,否则必胜。很神奇的东西,证明需要群论知识。 发现石子的合并满足上面四条性质,…

Jmeter内存溢出:java.lang.OutOfMemoryError: Java heap space解决思路

一、问题原因 用JMeter压测,有时候当模拟并发请求较大或者脚本运行时间较长时,JMeter会停止,报OOM(内存溢出)错误。原因是JMeter是一个纯Java开发的工具,内存由java虚拟机JVM管理,当内存回收不及时,堆内存不足时,就会报内存溢错误。 概念补充: 内存泄露:应用使用资源…

深度学习相关理论

一、深度学习相关理论 1.神经网络概述 2. 卷积神经网络CNN ①卷积层——计算方法是大矩阵内部小矩阵=较小矩阵,作用是特征提取 ②池化层——计算方法是大矩阵通过选取最大值或是平均值变成小矩阵,作用是降维、提高计算效率 3. 激活函数

关于diffusion model一些统计和数学的基础知识

likelihood-based models,通过(近似)最大似然直接学习分布的probability density(或mass)函数。典型的基于似然的模型包括自回归模型、归一化流模型、基于能量的模型(EBMs)和变分自编码器(VAEs)。 概率质量函数(Probability Mass Function,PMF):概率质量函数用于描述离散随…

UE4 -- 实现用于网络连接的插件

插件 UE中的插件就相当于一个模块,在引擎界面点击创建新的插件后,会在项目文件夹中生成插件的文件夹,在该文件夹内,只需要像游戏项目一样编写插件逻辑,最后在插件选择界面开启该插件即可 当新建插件后,UE会自动生成继承于IModuleInterface的类,说明该文件夹的内容为插件…

OKR-Periods of Words

[POI2006] OKR-Periods of Words 题面翻译 对于一个仅含小写字母的字符串 \(a\),\(p\) 为 \(a\) 的前缀且 \(p\ne a\),那么我们称 \(p\) 为 \(a\) 的 proper 前缀。 规定字符串 \(Q\) 表示 \(a\) 的周期,当且仅当 \(Q\) 是 \(a\) 的 proper 前缀且 \(a\) 是 \(Q+Q\) 的前缀。…

Phone List

题目描述输入格式输出格式样例 样例输入 2 3 911 97625999 91125426 5 113 12340 123440 12345 98346 样例输出 NO YES 数据范围与提示这道题的三条判断是否存在前缀的标准:当在建树字符串已经到结尾时,如果该点有结束标记,那肯定是前缀(不是真前缀)当在建树字符串已经到结…

SSM教务管理系统设计与实现(附源码下载地址)

@目录01 项目背景02 使用技术03 运行环境04 功能分析05 数据库设计06 项目工程结构07 部分功能展示及源码7.1 登录页7.2 管理员端--首页7.3 管理员端--课程管理7.4 管理员端--学生管理7.5 教师端--首页7.6 教师端--个人信息7.7 学生端--已修课程7.8 学生端--公告管理08 运行教程…