Upgrade to Pro — share decks privately, control downloads, hide ads and more …

言語の力でモデリングを表現する

2564c99f616f1ecfc0f617a6fe87e2a9?s=47 penguin045
December 23, 2020
110

 言語の力でモデリングを表現する

#modelinglt で話した内容です。

下の資料の方が詳しいので、是非読んでください。
実践ScalaでDDD
https://speakerdeck.com/crossroad0201/scala-on-ddd

2564c99f616f1ecfc0f617a6fe87e2a9?s=128

penguin045

December 23, 2020
Tweet

Transcript

  1. 型でモデリングとなかよくする 型でモデリングとなかよくする やなせ たかし 型でモデリングとなかよくする 

  2. 型でモデリングとなかよくする 型でモデリングとなかよくする ⾔語の⼒でモデリングを表現する ⾔語の⼒でモデリングを表現する やなせ たかし 型でモデリングとなかよくする 

  3. ただのScala の宣伝LT です DDD に関する実装周りの話をします。 型でモデリングとなかよくする 

  4. DDD あるある( 実装編) 型を⼤量に作る エンティティに何を実装するか問題 型でモデリングとなかよくする 

  5. 型を⼤量に作る 型を⼤量に作る public class SomeClass { // ... } 型でモデリングとなかよくする

  6. 型を⼤量に作る 型を⼤量に作る DDD では値まで型を作って表現するため型が増 えがち getter,setter などボイラープレートの宝庫とな りがち 型でモデリングとなかよくする 

  7. エンティティに何を実装するか問題 エンティティに何を実装するか問題 集約を跨いだ関連をどう表現するのか ⾃⾝に書いて,ほかのコンテキストから⾒ えるは嫌 とはいえやりすぎるとドメインモデル貧⾎ 症になる 型でモデリングとなかよくする 

  8. これらを⾔語機能で解決しませんか? 型でモデリングとなかよくする 

  9. そう, SCALA でね! そう, SCALA でね! 型でモデリングとなかよくする 

  10. まじめな解説 Scala にはこの辺りの問題を解決できる⼿段が⽤意 されています。 ここで紹介するのはほんの⼀部ですので,後で詳 しい資料を共有します。 型でモデリングとなかよくする 

  11. それでは,いきます 型でモデリングとなかよくする 

  12. 型を⼤量に作る 型を⼤量に作る Scala には という機能があります。 case class Employee(id:EmployeeID, name:Name) 型でモデリングとなかよくする

  13. これだけで コンストラクタ 読み取り専⽤のフィールド , , が実装されます。 ※ 他にもいろいろあります 型でモデリングとなかよくする 

  14. 継承の制限 Scala には, という機能があります。 は,そのクラスが定義されているファ イル内でしか継承ができません。 ほかにも利点はあって,パターンマッチの網羅性 検査とか、利点はたくさんあります。 使い⽅はこんな感じです。 sealed

    trait ApplyResult // 同一 内 実装 case class Accepted(person:Employee) extends ApplyResult case class Pending(person:Employee) extends ApplyResult case class Denied(person:Employee,) extends ApplyResult 型でモデリングとなかよくする 
  15. エンティティに何を実装するか問題 エンティティに何を実装するか問題 Scala の という機能を使えば、集約を またいだ先で独⾃の振る舞いを追加できます。 // case class User(id:UserId)

    //別 集約(別 ) case class Task(id:TaskId, asigneeId:UserId){ def assign(assignee: User):Task = copy(asigneeId = asignee } implicit class Asignee(user:User){ def assignTo(task:Task): Task = task.assign(user) } 型でモデリングとなかよくする 
  16. このように、Scala にはDDD に役⽴つ⾔語機能が⽤ 意されています。 そのほかにも、良い設計を後押しするような⾔語 機能が豊富にあるので、今こそ是⾮試して欲しい ⾔語です。 型でモデリングとなかよくする 

  17. 参考 実践Scala でDDD これを読んでいただければ今回のLT の全てと、そ れ以上の情報が⼿に⼊ります。 https://speakerdeck.com/crossroad0201/scala-on-ddd 型でモデリングとなかよくする  