LoginSignup
4
3

More than 5 years have passed since last update.

Scala関西SummitでDDD/CQRS+ESの話を聞いてきた

Last updated at Posted at 2017-09-09

本日は宮崎から飛んで大阪に来ています。

目的はScala関西Summit。
Scalaはほとんど手をつけていなかったのですが、DDDとCQRS/ESの話がきけるということで参加を決めました。

DDD

辻陽平さん(@crossroad0201 )の講演です。
実は興味はScalaの方ではなく、DDDをどう実装しているかが気になっていたのですが、予想外にもScalaの表現力はちょっといいなぁと思ってしまったセッションでした。

貴重な発表資料をアップしていただきました。

単純に簡単にオブジェクトやコレクションをイミュータブルにできるとかそういう利点があるのは知っていましたが、Scalaならではの表現は他にも、

def remaindTodayScheduleTo(id: UserId)={
    def findUser={...}
    def getScheduleOf(user: User) = {...}
    ...
}
(P19より)

のように関数をネストできるのでprivateメソッドがとっ散らからない。とか、

Application層の実装では、

def remaindTodayScheduleTo(id: UserId)
    def findUser={...}
    def getScheduleOf(user: User) = {...}
    def sentRemainderTo(user: User, schedule: Schedule)

    for {
        user          <- findUser
        todaySchedule <- getScheduleOf(user)
        sentResult    <- sentRemainderTo(user, schedule)
     } yield sentResult
}
(P24より)

のようにfor内包式を使って、UserCaseを表現したりとか、

例外をThrowせず、ラップして戻り値として返す(Either/Try)とか、テストしやすいし、APIとかは書きやすくなりそう。

対象のドメインをどのように表現するかは複雑なソフトウェアを設計する重要なテーマ。試してみようかなと思わせてくれるセッションでした。

CQRS/ES

@mtoyoshi さんの講演です。

貴重な発表資料をアップしていただきました。

CQRSは今まさに実装してみようかと色々試しているところで何か得れればと思っていたところ。

C(Commnad)とQ(query)でモデルを分ける(または、Qの集約を複数組み合わせる)とか、スナップショットは毎回取るのではなく、何回かに1回(回数はきちんとドメイン・業務をきちんと考慮して決める)で良くて、取得するときにはスナップショット+スナップショットをとった後のイベントから取得するとか。

ちょっとこの辺り、これから試してみようかと思います。

辻さんmtoyoshiさん、そしてScala関西Summitスタッフのみなさん。
本当にありがとうございました!

現場にきちんと還元します!アパホテルからは以上です。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3