iT邦幫忙

2023 iThome 鐵人賽

DAY 3
1
Kotlin

Kotlin魔法:Spring Boot 3的fp奇幻冒險系列 第 3

[新手村] Domain Modeling的魔力

  • 分享至 

  • xImage
  •  

前言

我們在昨天已經成功啟動了spring boot3,接下來我們就可以開發啦XD,但在打魔王前,我們總要先去各個商店購買武器、防具。今天就要來介紹我們的武器之一Domain modeling。

Domain

Domain,英文翻譯是領域,在這邊代表的意思就是Busniss domain,我們需要跟這個Domain的專家聊天、合作,一起討論出什麼是重要的核心觀念,
例如以滑鼠來說,對不熟悉的人來說,可能任何滑鼠都一樣,但對滑鼠專家來說,它會有左鍵、右鍵、中鍵,可能還有切換DPI的按鈕,以及側鍵等等,與Domain專家達到Share mental model(達成共識)就會是我們的第一目標,知己知彼百戰百勝XD

Ubiquitous Language

與專家們的溝通合作,就可以建立Ubiquitous Language(共通語言),才不會發生你不清楚我的明白。
例如說,現在有一個顏色在這邊。

有些人會說這是藍色!
有些人會說,不對!這是綠色!
這樣我們在認知上的不同,很有可能會造成開發上的災難,因此我們要避免這種情況發生,就要在我們的技術語言跟商業語言中,找出共同點。

從站在使用者的角度出發,我們更可以設計出瞄準解決使用者痛點的產品。

Bounded Contexts

那麼除了Ubiquitous Language之外,我們也要注意我們系統的Contexts是什麼,以生活上來說,我們可能到M記速食店用餐,我們點了一個1號餐,接著我們晚上又去了K記速食店,點了一個1號餐,我們不會困惑為什麼兩間的1號餐不一樣,因為Bounded Contexts不同,同樣叫做1號餐,但會因為因為Bounded Contexts不同而有不同的意義。

Domain modeling made functional

好影片:https://www.youtube.com/watch?v=2JB1_e5wZmU&ab_channel=KanDDDinsky

那麼我們可以利用functional programing的一些好處,來讓我們的domain model好懂,好讀,讓不會寫程式的人一介紹就可以看得懂XD

今天就先來介紹Sum type 和 Product type吧(這邊利用F#的語法來介紹)

Sum Type

從它的名字來看,它就是+(or)的關係。

type A = B | C

現在有一個type A,它可能是由B或是C所組成的,那麼A的可能性有幾種呢?
假設B的可能性有3種,C的可能性也有三種,那麼A的可能性就是B+C,總共6種可能性。

Product type

同樣的,我們從它的名字來看,它是乘法(And)的關係。

type A = { B:B; C:C }

假設B的可能性有3種,C的可能性也有三種,那麼A的可能性就是B*C,總共9種可能性。並且如果缺少一個屬性,例如少了C,A這個type就不成立。

總結

我們就可以利用Sum type以及Product type組合出我們想要的東西。
例如:1號餐的內容

type FirstCombo = { Hamburger:Hamburger; Fries:Fries }

type Hamburger = BeefHamburger | FishHamburger

上一篇
[新手村] Kotlin Spring Boot 3 啟動
下一篇
[小草原] Kotlin的劍 data class、Value class
系列文
Kotlin魔法:Spring Boot 3的fp奇幻冒險30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言