第3回 -ドメイン駆動設計のための オブジェクト指向プログラミング ハンズオン"に参加してきた!

今回はasoviewさんが主催された
"ドメイン駆動設計のための オブジェクト指向プログラミング ハンズオン"勉強会に参加してきました。

asoview!(アソビュー)|日本最大の遊びのマーケットプレイス

まえがき

最近になって、また日に日にDDDの話題を見る機会が多くなってきていますね。そんな中、今回はasoviewさんが主催された勉強会に参加してきました。

本勉強会は1回2時間の勉強会を計3回実施するという、なかなか骨太な勉強会です。
(諸事情により、2回目は参加することが出来ませんでしたが…)

これくらい時間をかけて行う勉強会はそう多くありませんが、
DDDを扱うにはこれくらい時間をかけて勉強会をするべきだとも思いました。
短い勉強会・発表だと、DDDの中で自分が気になっている箇所が取り扱われないこともよくありますし。

また、社内向けの勉強会を今回このように一般公開するという取り組みも、大変良い取り組みだと思いました。
(うちの部署でももっとこういうことを活発にやっていきたいな)

講演者

今回は、DDDに大変知見のあるシステム設計の増田 亨さんによる講演でした。
増田さんがasoviewで技術顧問を務めていらっしゃることもあり、勉強会開催の搬びとなったようです。
こちらの記事も大変面白かったです!

CTO江部・技術顧問増田 対談① ~アソビューの挑戦と魅力~
www.asoview.co.jp

各勉強会のテーマ

第1回 10月11日(水)19:30~21:30
テーマ:基本部品を作ってみる
・数値を扱うオブジェクトの設計と実装
・日付と年令を扱うオブジェクトの設計と実装
・集合を扱うオブジェクトの設計と実装

第2回 10月18日(水)19:30~21:30
テーマ:モデルと実装を一致させる
・モデルの表現方法:図、言葉、コード
モデリングと実装の演習:顧客の購入単価の平均

第3回 10月25日(水)19:30~21:30
テーマ:三層+ドメインモデルでWeb アプリケーションを実装してみる
・顧客の購入情報を記録
・購入単価の平均の表示

第1回,第2回勉強会の様子

嬉しいことに、本勉強会の様子は動画が上げられています!
また、後述しますが、本勉強会と同じ流れで会社のチームで同じ勉強会をしてみることも大変有効だと思います。特にJavaで開発を進められている所は、動画を観ながら、全く同じ流れで勉強会を進めることもできるので、やってみてはいかがでしょうか。

・第1回
youtu.be

・第2回
youtu.be

第3回で利用したリポジトリ

GitHub - system-sekkei/isolating-the-domain: Spring Boot : gradle, Spring MVC, Thymeleaf, MyBatis and Spring Security sample

きちんと事前に勉強会で利用するリポジトリが準備・共有されていて、
勉強会でもすぐにコードを書いて議論する、ということができたのが良かったです。

こちらのリポジトリに関しては、
issueの起票やpull request歓迎とおっしゃっていたので、
勉強会を再現する中で、実際にpull requestを送ってみるのも良いと思います。

例えば、僕はIDがメールアドレスで管理されている所が気になったので、それを変えようとしたり、、、
といって感じです。

勉強会の内容

内容自体は、connpassにも記載されていますが、
3回目はサンプルアプリケーションを元に、自分でissueを見つけて、直して、周りの人と話すっていうスタイルのハンズオンでした。

この勉強会はハンズオンと呼ぶにふさわしく(?)勉強会が始まって10数分で「今から10分でコード書いて周りの人と話し合って」となった時は
変な緊張感ありましたが、手を動かしながら勉強するにこしたことはないので、結果的には良かったなと思いました。笑

第3回

第3回目は、手を動かすことに終始した回でした。

github.com

こちらは(有)システム設計さんで用意されているサンプルリポジトリで、
主にSpring Boot, Thymeleaf, Mybatisを利用して作られた、会員情報の管理システムです。

H2を利用しているので、

www.h2database.com

spring.io


チェックアウトして立ち上げてすぐに、会員一覧表示、登録、更新、削除、を確認、試すことができます。

一覧表示
f:id:takahiro-f:20171029165557p:plain

会員登録
f:id:takahiro-f:20171029165553p:plain

更新
f:id:takahiro-f:20171029165545p:plain

削除
f:id:takahiro-f:20171029165541p:plain

環境設定の一切の手間なく、コードを改修できるので、今回のハンズオンに向いていたと思います。

また、自分はあまりMybatisの経験が多くないですが、こちらの構成は日本でSpring使っている人たちにとっては
一般的な構成だとも思いますので、そういった点でも、とっつきやすいのではないでしょうか。

ドメインモデルを意識して作られたサンプルアプリケーションを使って、Issueを見つけたり、
自分が改善できる点を改善したりして、Pull Requestを送ったり、
同じテーブルのメンバーと相談したり話したりしました。

2時間というと長いような気がしていたんですが、こういった形式のハンズオンだと時間はあっという間でした。

最後に

今回の勉強会は、
DDDの勉強そのものにもオススメですが、よりおすすめなのは、
DDDの導入を検討していたり、DDDをやってみたいけどやれてない
DDDとまではいかないまでも、ドメインに対する議論をもっとしたい
など、実際にドメインについて考える機会をどうチームに与えていくか、という観点で非常に良い勉強会だったように感じます。

また、今回の勉強会は以前職場でお世話になった方にお会いできたのも嬉しかったです!

次に

今回の記事投稿ではDDDそのものについては書く余裕がなかったので、
次の記事で勉強会を受けて、DDDについての自分の考えやなどをまとめて書こうと思います。