scala × ddd × 弊社実践例

24
SCALA × × DDD × 弊社実践例

Upload: -

Post on 17-Jul-2015

1.127 views

Category:

Technology


0 download

TRANSCRIPT

SCALA × × DDD × 弊社実践例

AGENDA

自己紹介と前提話

DDDとScalaを実践したプロセス

Scalaでの実践

DDDを採用する上でのあるある失敗談

そして僕らもハマった。

最後に

自己紹介と前提話

嫁からみた僕はこんなのらしい(嫁に描いてもらいました。)

自己紹介と前提話自己紹介(SCALA風味)

/* 原田侑亮さんを実装してみた。*/

class YusukeHarada extends V2TeamMember with

SepteniOriginalEngneer with SepteniOriginalEmployee {

val beforeJob = “C Engineer”

val skills = Seq(“C” , “C#” , “VBA” , “Scala” , “etc…”)

def basicWork() = {

writeContextMap()

convertContextMapToDomain()

executeCoding() /* Include Coding TestCode */

writeTest ()

}

// Todo: VV-1234で実装します!def espcialyWork() = ???

def study () = ???

def hobby () = ???

}

自己紹介と前提話伝えたいこと

エリックが何いってるかわからない件な人

DDD考えるキッカケになれば…

Scalaやってるんだけど…

是非プロジェクトに合わせてDDDを採用していただけるとっかかりになれば…

ScalaもDDDもやってます。

ごめんなさい!だいぶ、初歩的な第一歩のお話になってしまいますが、生暖い目で見守っていただければ…

ScalaもDDDもやっていないけど技術的に興味が…

是非是非、弊社にお越しください。

自己紹介と前提話WHY DDD ?の前に

DDDで統一できる!

自己紹介と前提話WHY DDD ?

長期保守が必要になるアプリケーションの開発になると予測できた。

以外と広告って複雑

エンジニアとディレクターの会話の溝があった

ソシャゲを開発していたころのお話ですが…

社内で流行り始めてた。

先生がいた。

カトジュン先生ありがとうございます。

自己紹介と前提話WHY

会社戦略としてScala流行らせたかった。

僕ははじめは別にC#でもいいじゃん。と思ってた。(過去)

DDDのコンテキストマップをそのままコードに落とせる。

get { return hoge; } を書かなくてもよい

コードが少ない。

やみつきですね。もう、C#すら、めんどくさい。

DDDを実践したプロセス

DDDを実践したプロセスユビキタス言語

ユビキタス言語の確立

実はコレがめんどくさい。

メンバーが多ければ多いほどめんどくさい。

しかし、コレがベースになるので重要

弊社ではどうやっているのか?

1. ストーリーからEntity ・ VO ・振る舞いを抽出する

2. POと相談する。

3. ドメイン図をアップデート

4. エンジニアとPOで再度レビューPOは日本語→英語の翻訳でしっくりくるか確認

DDDを実践したプロセスコンテキストマップ

コンテキストマップの作成

コンテキストマップって

アプリケーションの世界地図かく感じです。

イギリス地図ですらいろいろな解釈があるため、答えはありません。

DDDを実践したプロセスドメイン図

ドメイン図レビュー(弊社特化施策)

コンテキストマップをクラス図っぽく起こしたものです。

ユビキタス言語としてドメイン図と呼称することにしました。

では、目の前でやってみましょう!

DDDを実践したプロセス実践例(お題)

サンプルプロジェクト

弊社プロジェクトで、スケジュール管理が出来るWebアプリケーションを作ることになりました。すでにログイン機能は実装されており、ユーザーはシステムからは判別出来る状態になっています。

ユーザーストーリー

1. イベント管理者はイベントを登録できる。

2. イベント管理者はイベントに日付候補と詳細を登録できる。

3. イベント管理者は、自分以外のユーザーを招待できる。

4. ユーザーは、イベントの日付候補に○☓△をつけられる。

5. ユーザーは、○が多い日付を閲覧できる。

DDDを実践したプロセス実践例(お題)

ユーザーストーリー

まずは名詞を抽出

これらがEntityないしVOになりうる。

1. イベント管理者はイベントを登録できる。

2. イベント管理者はイベントに日付候補と詳細を登録できる。

3. イベント管理者は、自分以外のユーザーを招待できる。

4. ユーザー ⇒ POに追求すると「イベント参加者」は、イベントの日付候補に○☓△をつけられる。

5. ユーザーは、○が多い日付を閲覧できる。

DDDを実践したプロセス実践例(お題)

ユーザーストーリー

次に動詞

これらがEntityもしくはVOの振る舞いになる。

1. イベント管理者はイベントを登録できる。

2. イベント管理者はイベントに日付候補と詳細を登録できる。

3. イベント管理者は、自分以外のユーザーを招待できる。

4. ユーザー ⇒ POに追求すると「イベント参加者」は、イベントの日付候補に○☓△をつけられる。

5. ユーザーは、○が多い日付を閲覧できる。

DDDを実践したプロセス実践例(まとめ)

いかがだったでしょうか?

今回は、プロジェクターを使用するためにCacooでやっておりますが、普段は以下の図の通り付箋とどこでもホワイトボードでやってます。

SCALA での実践

DDDフレームワークorg.sisioh.dddbaseの導入

カトジュンさんお手製のDDDをするためのフレームワーク

サンプルコード

Google認証で投稿できるしょっぱい掲示板

https://bitbucket.org/saxia/board

ProductOwnerによるTraitレビュー

SepteniのPO = コード書けない

DDDではエンジニア・非エンジニアは関係ない!

val/defさえ読めればドメインレビューができます!

SCALA での実践

DDDを採用する上でのあるある失敗談

技術に引っ張られる。

ドメインはやっぱりドメインエキスパートと一緒につくりあげるものです。

技術でドメイン捻じ曲げるのは良くないよね。

エンジニアも凛とした心で業務(ドメイン)に向きあいましょう。

技術のマリオネットになってはいけない。

DDDを採用する上でのあるある失敗談

逆流現象

インフラ層がドメイン層を知ってしまっている。

ORマッパー便利ですよね。

けど、ORマッパーで作ったオブジェクトをそのまま使うと…

ドメイン層がアプリ層を知ってしまっている。

Formもオブジェクトで来る時代

ドメインにそのままForm渡しちゃってない?

どうするの?

プロジェクト分割!

http://qiita.com/t_hirohata/items/6c7d22a9a29f8263690d

DDDを採用する上でのあるある失敗談

エリックが言っていることがわからない件

500ページもあるし、しょうが無いよね

だからこうやってプレゼンしてます。大丈夫です。

めげずに読みましょう。

読んでみて困ったら、カトジュンさんがタイムチケット売っていらっしゃるのでそちらへhttps://www.timeticket.jp/j5ik2o

まとめ

DDDをやるなら!

ユビキタス言語を制定しよう!

コンテキストマップ(全体俯瞰図)を書いて、本当に必要なものだけのやりとりを意識しよう

ドメインを考えるときは技術を忘れよう!

ScalaでDDDやるなら

org.sisioh.dddbaseを使うと便利!

特にEntityとRepository周り!

とりあえず、非エンジニアな方もこれだけ教えれば読める

valは要素

def は振る舞い

protected とかprivate ついてたら読まなくていいよ!

プロジェクト分割で逆流を抑えよう。

まとめ?

冒頭でも記載しましたが、SepteniOriginalでは積極採用しています。

DDDに興味がある方

Scalaを試したい方

是非是非ともに弊社にお越しください!笑って開発できる現場を提供いたします!

ご清聴ありがとうございました!