iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
影片教學

『請你跟我這樣做』- 30 天 TDD 出一個 SLOT 算分器系列 第 15

Day 15 不改變狀態的 Query 接口

  • 分享至 

  • xImage
  •  

Yes

CQS

在軟體設計中有一種思路叫「命令與查詢分離」(Command Query Separation),意思是指我們把所有操作都分成兩種:會改變狀態的命令,與不會改變狀態的查詢。

以銀行功能為例,「存錢」、「取款」會改變狀態,即為命令;而「查詢餘額」不會改變狀態(肯定不會的吧?),即為查詢。如果所有操作都能清楚地定義其為查詢或是命令,那所有操作都會變得比較單純。

然而在實務上,我們還是有一些場景有其他考量,例如,存完款後直接在畫面上顯示餘額,這時如果 API 接口真的完全分離也不是不行,只是就會多一個網路 I/O,也不是很划算。

這時怎麼辦?這時,我們其實可以折衷一下,讓存錢的 Command 回傳一個簡單(一定要簡單)的值來顯示。這時 API 合一了,但內部也一定要合一嗎?就不一定了。我們也可以在一個 API 中,先用命令改變狀態,再用查詢撈出餘額。如此一來系統內部還是可以保持 CQS 的設計。

超越 CURL

這樣,API 的設計就能表現業務場景,而不會被 DB 綁架,變成只有 CURL 了。


上一篇
Day 14 與前端溝通 Spin 後的盤面
下一篇
Day 16 Primitive Obsession 與 CQS
系列文
『請你跟我這樣做』- 30 天 TDD 出一個 SLOT 算分器30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言