在我們的孢子記賬應用中,賬本是用于記錄每一筆收支流水的核心模塊。通過賬本,我們可以清晰地追蹤資金的流入與流出,進行數據統計和分析,為后續的報表生成和決策支持提供基礎數據。預算模塊則是用于設置和管理預算的功能,幫助用戶控制支出,避免超支。賬本和預算模塊的實現對于整個記賬應用至關重要,因此在微服務中,我們需要對這兩個模塊進行詳細的設計和實現。
一、小修改
與收支分類模塊的功能類似,賬本模塊和預算模塊就目前來看微服務和單體應用的功能代碼差異不大,賬本模塊一共包含四個功能:創建賬本、刪除賬本、更新賬本以及分頁查詢賬本列表,預算模塊一共包含五個功能:創建預算、刪除預算、更新預算、分頁查詢預算、以及查詢預算詳情。
以賬本模塊為例,我們從單體應用分支中將與賬本模塊相關的代碼復制到當前我們的微服務分支中。然后,我們調整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風格,從而實現了微服務化。通過這種方式,我們可以更好地組織代碼,提高代碼的可維護性和可擴展性。
在后續的章節中,我們將繼續對剩余模塊進行微服務化改造,并逐步完善我們的孢子記賬應用。微服務化的過程雖然需要一些時間和精力,但它將為我們帶來更好的架構和更高的靈活性,使我們能夠更好地應對未來的需求變化和業務擴展。