iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0

Q: 為甚麼原本 ActiveRecord 提供的 ORM 不用,要再包一層自己的 ORM?

在本系列的第2~5篇中有稍微提到過,這邊列點整理

  • Model 沒辦法代表領域物件,且修改 schema 的成本過高。
  • ActiveModel 可以直接更新資料,而以 Boxenn 建立的 domain 則是必須透過 repository,較不容易向外溢出 DAL 邏輯。
  • 測試中很難替換 model ,做到沒有 DB 的測試,而以 Boxenn::Entity 建立的物件則完全不依賴外部資源,進而達到執行速度快的測試。

Q: 額外建立 domain 的基礎設施不會很花時間嗎?

一開始沒有制定 DAL 的介面時,會花很多時間來想要怎麼實踐和通用化。但後來收斂成 Boxenn 後,最花時間的是討論 domain 內的 aggregate 要怎麼設計及要以哪個 entity 當 agrregate root, 然而這步正好是蒐集領域知識、深入了解領域專家想法後的產物,因此值得花費較久時間設計來得到貼近現實世界的領域。當有了 aggregate 後,剩下的部分就可以很快速地建立。

Q: 一定要每個 domain 都用那麼複雜的基礎建設嗎?

不一定,我們只有在擁有複雜業務邏輯的領域才會使用 DDD 來解決。除此之外, 如果遇到讀取複雜的領域,Boxenn 也可以實做 readonly domain,Write 則使用原本的 AactiveRecord

這邊有點 CQRS pattern 的味道。


上一篇
[DAY16] Data Access Layer 測試
下一篇
[DAY18] Use Case 設計概念
系列文
在 Ruby on Rails 中導入 Domain-Driven Design 是不是搞錯了什麼?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言