Scala × DDD × 弊社実践例
-
Upload
- -
Category
Technology
-
view
1.127 -
download
0
Transcript of 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 ?
長期保守が必要になるアプリケーションの開発になると予測できた。
以外と広告って複雑
エンジニアとディレクターの会話の溝があった
ソシャゲを開発していたころのお話ですが…
社内で流行り始めてた。
先生がいた。
カトジュン先生ありがとうございます。
自己紹介と前提話WHY
会社戦略としてScala流行らせたかった。
僕ははじめは別にC#でもいいじゃん。と思ってた。(過去)
DDDのコンテキストマップをそのままコードに落とせる。
get { return hoge; } を書かなくてもよい
コードが少ない。
やみつきですね。もう、C#すら、めんどくさい。
DDDを実践したプロセスユビキタス言語
ユビキタス言語の確立
実はコレがめんどくさい。
メンバーが多ければ多いほどめんどくさい。
しかし、コレがベースになるので重要
弊社ではどうやっているのか?
1. ストーリーからEntity ・ VO ・振る舞いを抽出する
2. POと相談する。
3. ドメイン図をアップデート
4. エンジニアとPOで再度レビューPOは日本語→英語の翻訳でしっくりくるか確認
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. ユーザーは、○が多い日付を閲覧できる。
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を試したい方
是非是非ともに弊社にお越しください!笑って開発できる現場を提供いたします!