iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
Software Development

在 Ruby on Rails 中導入 Domain-Driven Design 是不是搞錯了什麼?系列 第 7

[DAY7] 手起刀落

名詞解釋

  • model
    在本系列文章中,代表 ActiveRecord 自動產生的 model

  • schema
    代表 DB 中的 table 和 column

  • aggregate
    在 Domain-Driven Design 中代表一個領域中的一組物件,通常會對應到真實世界的一個物體或實物,甚至是抽象的概念,由數個 entities 和 value objects 所組成

  • entity
    一個擁有 identity 的物件

    這邊的 identity 指可識別這個物件的屬性,不一定專指 id,也有可能是多個屬性所組成,重點是一定要為 unique

  • value object
    一個擁有多種屬性的物件,不具有可以識別的屬性

更多關於 entity、value object 和 aggregate 的知識可以看這系列文章

斬草...啊...不能除根

現在大致將原本的一個大系統區分成了多個子系統,我們的下一步是開始嘗試將 Domain-Driven Design 的戰術設計導入到 legacy code 中。

因為對領域有了更多的認識,我們發現舊的 Model 設計已經與真實世界的需求分道揚鑣,所以需要重新設計 aggregate ,而修改舊有 schema 的成本又太高,因此我們採用了 Anti-Corruption Layer (簡稱 ACL) 的方式來切割舊債。

我們開了一個新資料夾叫 domains,並在底下開立各 domain 的資料夾:

https://ithelp.ithome.com.tw/upload/images/20210922/20108265X95CKaZSHx.jpg

相關設定

  • 修改 Rails eager_load model 的路徑
# config/application.rb
class Application < Rails::Application
  config.eager_load_paths += Dir['domains']
end

那至於 domain 資料夾裡會有那些東西呢,靜待下回揭曉!


上一篇
[DAY6] 萬事起頭難
下一篇
[DAY8] 與 ActiveRecord 分手
系列文
在 Ruby on Rails 中導入 Domain-Driven Design 是不是搞錯了什麼?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言