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

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

penguin045
December 23, 2020
220

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

#modelinglt で話した内容です。

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

penguin045

December 23, 2020
Tweet

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  13. これだけで
    コンストラクタ
    読み取り専⽤のフィールド
    , ,
    が実装されます。

    他にもいろいろあります
    型でモデリングとなかよくする

    View full-size slide

  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
    型でモデリングとなかよくする

    View full-size slide

  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)
    }
    型でモデリングとなかよくする

    View full-size slide

  16. このように、Scala
    にはDDD
    に役⽴つ⾔語機能が⽤
    意されています。
    そのほかにも、良い設計を後押しするような⾔語
    機能が豊富にあるので、今こそ是⾮試して欲しい
    ⾔語です。
    型でモデリングとなかよくする

    View full-size slide

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

    View full-size slide