重現後端實作 - Cucumber 的文件測試法
經過調整成 ViteRuby 的專案結構後,我們已經讓 Vite 所撰寫的前端恢復基本的功能。然而我們使用 Grape 所撰寫的後端行為還無法正常運作,因此接下來我們要用類似的方法將後端重新實現,並且通過所有的 Cucumber 測試。
經過調整成 ViteRuby 的專案結構後,我們已經讓 Vite 所撰寫的前端恢復基本的功能。然而我們使用 Grape 所撰寫的後端行為還無法正常運作,因此接下來我們要用類似的方法將後端重新實現,並且通過所有的 Cucumber 測試。
我們在前面的練習中大部分的實作都是可以直接沿用,唯一需要重新處理的是 Cucumber 的步驟定義,他會受到使用的語言、框架需要重新撰寫,接下來我們會先將前端的實作搬移到 Rails 中讓專案能夠運作起來。
在前面的實作中我們將前端跟後端分別獨立進行開發,這是很常見的一種方式。然而在 Rails 7 的生態系裡面,透過 jsbundling-rails 可以很輕鬆的整合在一起,接下來我們會使用類似基礎的 ViteRuby 把前端的 Cucumber 測試搬移到 Rails 上重現一次性整合完畢的實作。
這一系列算是一個新的嘗試,以往在撰寫技術文章時大多會將許多情報壓縮在一篇的內容中討論,然而這樣的情報量對許多人來說仍然是負擔很大的。
即使將其拆分到約四個月的內容量,我仍發現很難在不細說 Domain-Driven Design、Clean Architecture 等等觀念完善的解釋,但我還是選擇不特別去提出這些內容。
Entity(實體) 和 Aggregate(聚合) 是商業邏輯的基礎要素,我們將資料轉換成有意義的資訊,若要討論到該如何運用這些資料,那麼就屬於 Service(服務)和 Use Case(使用案例)的負責的部分。
倉庫跟實體是相當基本的概念,然而還不足以涵蓋更多的情境。我們還需要討論 Aggregate(聚合)的情況,以我們這次的例子來說,就是一種聚合的表現。有了 Aggregate 的概念後,就可以逐步看出一個系統的邊界。
在我們實作訂閱功能的過程中,提到了像是 Entity(實體)還有 Repository(倉庫)等關鍵字,現在我們要來回顧一些這些使用的物件有怎樣的特性,在 Rails 中我們應該如何使用,才能避免預期外的問題。
經過這段時間的實作,我們的規格已經逐漸確定下來而且更加清晰,現在我們終於到了決定儲存方式的階段,目前的功能採用關聯式資料庫(RDBMS)儲存算是相當適合的方式,因此我們可以直接利用 ActiveRecord 來實現。
假設我們繼續確認訂閱的需求,發現現有的功能無法記錄使用者在何時進行延展,因此希望加入「在 2023-03-14 延展」的資訊在畫面上,然而我們現在是使用整數儲存在 Subscription
的 #items
屬性中,除了無法明確表達意義外,也不容易再繼續擴充。
到目前為止,我們已經透過驗收測試保護了我們想實作的功能,然而有一些實作如果不儘快重構,很快就會變成難以維護的技術債,因此在提交部分程式碼後,我們需要盡快的對這些地方做處理。