32.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--财务服务--账本与预算

发布于:2025-08-01 ⋅ 阅读:(20) ⋅ 点赞:(0)

在我们的孢子记账应用中,账本是用于记录每一笔收支流水的核心模块。通过账本,我们可以清晰地追踪资金的流入与流出,进行数据统计和分析,为后续的报表生成和决策支持提供基础数据。预算模块则是用于设置和管理预算的功能,帮助用户控制支出,避免超支。账本和预算模块的实现对于整个记账应用至关重要,因此在微服务中,我们需要对这两个模块进行详细的设计和实现。

一、小修改

与收支分类模块的功能类似,账本模块和预算模块就目前来看微服务和单体应用的功能代码差异不大,账本模块一共包含四个功能:创建账本、删除账本、更新账本以及分页查询账本列表,预算模块一共包含五个功能:创建预算、删除预算、更新预算、分页查询预算、以及查询预算详情。

以账本模块为例,我们从单体应用分支中将与账本模块相关的代码复制到当前我们的微服务分支中。然后,我们调整Controller以及Action的路由地址,使其符合标准的restful风格。并且Controller 将不再继承BaseController,而是直接继承ASP.NET Core的ControllerBase,这是因为BaseController的功能,在我们当前的微服务中已经通过中间件的形式实现了,而且还更加的通用。以下代码是修改后的账本模块的Controller代码:

// more code ...

/// <summary>
/// 账本接口
/// </summary>
[Route("/api/account-books")]
[ApiController]
public class AccountBookController : ControllerBase
{
    // more code ...

    /// <summary>
    /// 创建账本
    /// </summary>
    /// <param name="request">账本请求</param>
    /// <returns>返回新增账本id</returns>
    [HttpPost]
    public ActionResult<long> CreateAccountBook([FromBody] AccountBookAddRequest request)
    {
        // more code ...
    }

    /// <summary>
    /// 删除账本
    /// </summary>
    /// <param name="id">账本ID</param>
    /// <returns>返回删除结果</returns>
    [HttpDelete("{id}")]
    public ActionResult<bool> DeleteAccountBook([FromRoute] long id)
    {
       // more code ...
    }

    /// <summary>
    /// 更新账本
    /// </summary>
    /// <param name="id">账本ID</param>
    /// <param name="request">账本修改请求</param>
    /// <returns>返回修改结果</returns>
    [HttpPut("{id}")]
    public ActionResult<bool> UpdateAccountBook([FromRoute] long id, [FromBody] AccountBookEditeRequest request)
    {
       // more code ...
    }

    /// <summary>
    /// 分页查询账本列表
    /// </summary>
    /// <param name="page">页码</param>
    /// <param name="size">每页数量</param>
    /// <returns>返回账本列表</returns>
    [HttpGet]
    public ActionResult<PageResponse<AccountBookResponse>> GetAccountBooks(
        [FromQuery] int page = 1,
        [FromQuery] int size = 10)
    {
        // more code ...
    }
}

在上面的代码中,我们屏蔽掉了不变的代码,只保留了与路由相关的部分。可以看到,我们将Controller的路由地址修改为/api/account-books,并且每个Action的路由地址也进行了相应的调整,使其符合RESTful风格。同样,其他微服务的功能模块的Controller以及Action的路由地址同样也要修改成符合restful风格的。我们还将在Action里Mapper数据转换的代码迁移到了Service层中,这样可以使Controller更加简洁,并且符合单一职责原则。

对于Server和Server的实现,我们只需要将原本在Action中的Mapper数据转换的代码放在Server中即可,其他的代码暂时不需要进行修改,因为它们的功能和单体应用中的实现基本一致。我们只需要确保在微服务中能够正确调用这些服务即可。

我们在后续的单体转微服务的章节中,不会再详细介绍每个模块的代码实现,而是给出需要修改的部分的代码,这是因为目前我们所做的只是将单体应用改为微服务应用,并且只作一些小的修改,增加一些小的功能,而这些修改的代码量并不大,且与单体应用中的实现非常相似。因此,我们只需要关注修改的部分即可。

Tip:预算模块的微服务化改造,我希望大家模仿账本模块微服务化改造的思路自己动手实现,遇到问题可以参考账本模块的实现,或者在评论区留言,我会尽快回复。

二、总结

这篇文章很短,主要是对账本和预算模块的微服务化改造进行了简单的介绍。我们通过将单体应用中的账本和预算模块的代码迁移到微服务中,并进行一些小的修改,使其符合RESTful风格,从而实现了微服务化。通过这种方式,我们可以更好地组织代码,提高代码的可维护性和可扩展性。

在后续的章节中,我们将继续对剩余模块进行微服务化改造,并逐步完善我们的孢子记账应用。微服务化的过程虽然需要一些时间和精力,但它将为我们带来更好的架构和更高的灵活性,使我们能够更好地应对未来的需求变化和业务扩展。