#modelinglt で話した内容です。
下の資料の方が詳しいので、是非読んでください。 実践ScalaでDDD https://speakerdeck.com/crossroad0201/scala-on-ddd
型でモデリングとなかよくする型でモデリングとなかよくするやなせ たかし型でモデリングとなかよくする
View Slide
型でモデリングとなかよくする型でモデリングとなかよくする⾔語の⼒でモデリングを表現する⾔語の⼒でモデリングを表現するやなせ たかし型でモデリングとなかよくする
ただのScalaの宣伝LTですDDDに関する実装周りの話をします。型でモデリングとなかよくする
DDDあるある(実装編)型を⼤量に作るエンティティに何を実装するか問題型でモデリングとなかよくする
型を⼤量に作る型を⼤量に作るpublic class SomeClass {// ...}型でモデリングとなかよくする
型を⼤量に作る型を⼤量に作るDDDでは値まで型を作って表現するため型が増えがちgetter,setterなどボイラープレートの宝庫となりがち型でモデリングとなかよくする
エンティティに何を実装するか問題エンティティに何を実装するか問題集約を跨いだ関連をどう表現するのか⾃⾝に書いて,ほかのコンテキストから⾒えるは嫌とはいえやりすぎるとドメインモデル貧⾎症になる型でモデリングとなかよくする
これらを⾔語機能で解決しませんか?型でモデリングとなかよくする
そう,SCALAでね!そう,SCALAでね!型でモデリングとなかよくする
まじめな解説Scalaにはこの辺りの問題を解決できる⼿段が⽤意されています。ここで紹介するのはほんの⼀部ですので,後で詳しい資料を共有します。型でモデリングとなかよくする
それでは,いきます型でモデリングとなかよくする
型を⼤量に作る型を⼤量に作るScalaには という機能があります。case class Employee(id:EmployeeID, name:Name)型でモデリングとなかよくする
これだけでコンストラクタ読み取り専⽤のフィールド, ,が実装されます。※他にもいろいろあります型でモデリングとなかよくする
継承の制限Scalaには, という機能があります。は,そのクラスが定義されているファイル内でしか継承ができません。ほかにも利点はあって,パターンマッチの網羅性検査とか、利点はたくさんあります。使い⽅はこんな感じです。sealed trait ApplyResult// 同一 内 実装case class Accepted(person:Employee) extends ApplyResultcase class Pending(person:Employee) extends ApplyResultcase class Denied(person:Employee,) extends ApplyResult型でモデリングとなかよくする
エンティティに何を実装するか問題エンティティに何を実装するか問題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)}型でモデリングとなかよくする
このように、ScalaにはDDDに役⽴つ⾔語機能が⽤意されています。そのほかにも、良い設計を後押しするような⾔語機能が豊富にあるので、今こそ是⾮試して欲しい⾔語です。型でモデリングとなかよくする
参考実践ScalaでDDDこれを読んでいただければ今回のLTの全てと、それ以上の情報が⼿に⼊ります。https://speakerdeck.com/crossroad0201/scala-on-ddd型でモデリングとなかよくする