三流プログラマが脱三流するために書くブログ

PHP, オブジェクト指向プログラミング, デザインパターン, リファクタリング, DDD, 関数プログラミング, etc.

4. DDDの話を聴きに札幌まで行ってきました

こんなイベントが札幌でありまして。

リレーションシップ駆動要件分析 ☓ ドメイン駆動設計 ☓ アジャイル開発 - アジャイル札幌 | Doorkeeper

最近某社で DDD 勉強会のファシリテーションをやっているんですが、いくつか迷っていることがあったので、Twitter で流れてきたのを見て迷わず参加することにしました (旨いお寿司食べたかったし)。

10/3 追記 (発表資料が公開されたので埋め込みました)

以下、私の課題と、勉強会 (および懇親会) で得た知見を書いておきます。 懇親会での会話はその場でメモしていたわけではないので、間違ってるかもしれませんが。

迷っていたこと

DDD 勉強会のファシリテーションをしている中でどうしたらいいかなぁと考えていたのは、大きいものを挙げると以下のみっつです。

  1. いまの進め方でいいのかどうか
  2. 適切なモデリング (設計) をどうやって追求したらいいか
  3. 知識も経験もバラバラな参加者のレベルをどうやって引き上げていったらいいか

勉強会に参加した結果 & 増田さんと話した結果

1. いまの進め方でいいのかどうか

私自身が DDD 勉強会のファシリテーションをやるのが初めてなので、不安まじりでやっているところがありますが、ひとまず、設計 (モデリング) と実装を漸進的に繰り返し、実装でつまったらモデルを見直す、という基本方針は間違ってないと思えました。 ドメインエキスパートのいない仮想プロジェクトの形式でやっているので、そこがどうなのかなぁとは思っているんですが、まぁ、ユースケースや用語はわりと明らかな題材を選んでいるので、ユビキタス言語の作成でつまったり間違った方向に行ってしまうことはなさそうなので、そのままいこうと思います。

増田さんからは、最初は試行錯誤ですよ、と言ってもらったのも自信を後押ししてくれました。

2. 適切なモデリング (設計) をどうやって追求したらいいか

オブジェクト指向モデリングにおいて、属性と責務を適切に配置することが肝要かと思いますが、何をもって、適切か、という指針が持てずにいました。

属性に関しては、間違ったモデリングをした場合、つくる課程で違和感がでてきますよ、ということで、隠れた (発見できていない) クラスがある、とか、クラス分割の兆候だ、みたいな、示唆がありました。

責務に関しては、どのクラスに割り当てるか迷ったときは、その責務によって操作されるデータ (属性) を持つクラスに割り当てることを原則にしましょう、ということで、現実世界のワークフローを意識せず、ソフトウェアを実装することにフォーカスすべきだ、というお話でした。

CQRS とかレイヤードアーキテクチャとか、原則はもちろんあるので、そこら辺は押さえつつ、改善を繰り返して適切なモデリングを追求していこうと思います。

3. 知識も経験もバラバラな参加者のレベルをどうやって引き上げていったらいいか

DDD は前提となる知識として、オブジェクト指向設計だったり、リファクタリングだったりがあるので、そこへたどり着くまでが大変ですよね、という話を増田さんにしたところ、別に必要ないよと、一笑に付されました(笑)

DDD の要諦は、

  • ドメイン (対象業務) を深く知ること
  • 言葉の定義を明確にすること
  • 実装可能なモデルを手に入れること

であり、かつ、モデルと実装をインクリメンタルに改善していくことが大事なので、それぞれがそこを目指してイテレーションを回しているなら、問題ない、と。

ただ、メンバーが価値観を共有できない場合は、その限りではないので、従ってもらうか、出ていってもらうかしかない、とも。

DDD はあくまで開発手法なわけですが、哲学というか、依って立つ思想みたいなものがあるので、そこ共有するのは大前提である、ということなんですね。

余談

余談ですが、今回の裏テーマのひとつに「越境」というのがあって、サービスやシステムに関わるみんなの当事者意識や問題解決に対する姿勢みたいなものが、ソフトウェアの完成度に大きく影響する、ということで、わりとそういうの平気でやってきたクチではありますが、最近ちょっと臆してしまっていたので、これからも正しいと思ったことはどんどん越境して口出したり、行動していったりしていきます。

フリーランスだと業務委託でやっているので、本来はそういうところは範疇外なわけで、そんなのいいからお前の仕事しろよって言われないように、本分は守りつつ、プラスアルファの価値提供をよかれと思ってやってます!という体で、叩かれないていどに口出ししていこうと思います。

1. ひとり振り返り会 - 三流プログラマが脱三流するために書くブログ

あと、

だそうです(笑) (増田さん談)

まとめ

  • 札幌の寿司は旨い
  • DDD これからも学んでいきます