在这个示例中,将探讨如何将BlazorUI前端与Azure函数结合使用,并通过事件溯源技术实现数据存储。事件溯源是一种数据存储模式,它记录了系统中所有状态变化的事件,而不是存储当前状态本身。这种方法提供了一种灵活的方式来查询和恢复过去的系统状态。
要创建一个新的银行账户,首先需要访问用户菜单,然后填写表单。可以选择手动输入银行账户号码,或者点击“生成随机账户号码”按钮,让系统为生成一个。创建账户后,可以通过点击“导航到{accountnumber}”按钮来访问账户。
要获取账户余额,需要选择第一个部分,然后点击“获取余额”按钮。这将触发Azure函数,该函数将返回该银行账户的余额。由于后端存储是基于事件溯源的,因此获取过去某个日期的账户状态与获取当前状态一样容易。只需输入一个“截至日期”,系统就会返回该日期的账户余额。
第二个可展开的部分允许进行存款操作。需要填写存款金额、存款来源和任何评论,然后点击“提交”按钮,这些参数将被传递给Azure函数以完成存款。存款成功后,系统会显示一条消息提示。
第三个可展开的部分用于取款操作。这里需要填写取款金额和评论,然后再次点击“提交”按钮将这些参数发送给Azure函数。由于取款函数需要运行一个投影来检查当前余额(以防止账户透支超过其限制),因此该函数还会返回有关账户余额的信息。
最下面的可展开部分允许设置透支额度。填写所有参数后点击“提交”按钮,这些参数将被传递给Azure函数执行。同样,由于这个Azure函数需要获取现有的透支和余额以进行验证,因此它可以将这些信息返回给前端。
应用程序的后端运行在Azure无服务器函数上,这些函数由事件溯源支持,每个账户的事件流都存储在Azure表中。前端页面注入了标准的HttpClient和一个RetailBankApi类,用于与Azure函数的所有通信。
由于这个Blazor前端完全在客户端运行,它可以被托管在一个静态网站上。Azure存储账户提供的静态网站功能非常适合这个需求。需要将这个静态网站的URL添加到Azure函数应用程序的CORS设置中,以便允许从那里访问。
以下是调用Azure函数以获取账户余额的示例代码:
private async Task GetBalance()
{
LastFunctionMessage = $"Getting balance for {accountnumber} at {getbalancePayload.AsOfDate}";
try
{
var result = await retailBankApi.GetAccountBalance(Http, accountnumber, getbalancePayload);
LastFunctionMessage = result.Message;
LastRunTime = result.ExecutionTime;
LastSequenceNumber = result.SequenceNumber;
}
catch (Exception ex)
{
LastFunctionMessage = ex.Message;
}
}