どうも、ばやしです。
2/27に行われたJoe Yoder : Domain modeling techniques for designing microservicesに参加してきたので、参加レポです。 なお私はDDDに詳しいわけでもなく、英語もおぼつかないので誤っている部分があるかもしれませんが、ご了承いただければと思います。
どんな研修だったの?
ドメインモデリングを中心にドメイン駆動設計(以下DDD)の概念を学びつつ、それがどうマイクロサービスに役立つのかを学ぶ研修でした。 具体的にピザ屋のシステムや、交通違反システムを例に挙げてDDDの概念を理解しつつ、ワークショップではクレジットカードシステムを題材にイベントストーミングやマイクロサービスアーキテクチャ設計などを行いました。
全編英語だったのですが
- 英語で講義
- 日本人同士で日本語でワークショップ
を繰り返すというスタイルであったり、講義資料が日本語に訳されていたりと、英語がそこまで得意ではない私でも割と理解できました。 また講師のJoe Yoderがめちゃめちゃ優しくて、自分の拙い英語を使っても大丈夫そうな雰囲気が全体的に漂っていてました。ほんと助かる。
具体的に研修の中で出てきたことは以下の通りです
- ドメインモデリングとは?その意義
- ドメイン駆動設計の概要
- マイクロサービスとは?その意義
- ドメインモデリングとマイクロサービスの関係
- マイクロサービスのガイドとなる原則 IDEALS
- 複数のケースでのマイクロサービスアーキテクチャの例
- 単一BC(Boundary Context 境界づけられたコンテキスト)で単一マイクロサービス
- 2つのBCから2つのマイクロサービスがイベント経由で連携する場合
- などなど
- ワークショップ
一日の研修としては大ボリュームですね。 英語のリスニングということもあり、研修参加者の多くは夕方には脳みそが悲鳴をあげていました。
講義で概念を学ぶ際に具体的な例が出てくるので「集約完全に理解した!」となり、その後のワークショップで「集約ってなんだ...なんもわからん...」ってなる理解のジェットコースターが楽しかったです。
以下印象的だった学びをつらつらと書いていきます。
DDDの目標は関係者達の共有されたメンタルモデルを作ることにある
Joe曰くドメインモデリングだけでは開発チームはドメインエキスパートの話す言葉をコードに翻訳するだけになります。そうではなく共有されたメンタルモデルがあって、それをドメインエキスパートも開発チームもステークホルダーも、そしてソースコードもそこを参照する形にするのがDDDの目標だそうです。
自分としてはこの説明はわかりやすく、だから一緒にイベントストーミングしたり同じユビキタス言語を作るんだね、と今までバラバラに認識していたDDDの構成要素が自分の中でつながった気がします。
ユビキタス言語はユニバーサル言語ではない
異なる境界づけられたコンテキストの中で、同じ単語が異なる意味で出てくることはおかしいことではありません。 あるサブドメインで出てくる◯◯という単語と他のサブドメインで出てくる同じ〇〇という単語は、共通の属性を持つかも知れませんが異なる属性も持つでしょう。例えば顧客を考えます。注文のコンテキストと配送のコンテキストで顧客は違った属性を持ちます。こういった場合、コンテキストを横断した顧客というエンタープライズモデル(大きいモデルという意?)を作るのではなく、コンテキストが異なると属性が異なることを理解して、それぞれ独立した存在として定義します。
(今まとめていて思ったのだけど、コンテキストが異なって出てくる同じ単語にできるだけ違う名付けをした方が良かったりするのかな。例えば注文コンテキストの顧客に注文主って名付けるとか。いやでも同じ単語が使われていることで同じ存在であることも表せるからいいのかな。わからん)
マイクロサービスのガイドとなる原則 IDEALS
オブジェクト指向設計の5つの原則、SOLIDのようにマイクロサービスにも5つの原則があります。それがIDEALSです。
- Interface segregation: インターフェイス分離
- Deployability (is on you): デプロイ容易性
- Event-driven: イベント駆動
- Availability over consistency: 整合性よりも可用性
- Loose coupling: 疎結合
- Single responsibility: 単一責任
ググったらこんな記事も出てきたので参考までに置いておきます。 www.infoq.com
研修の中でマイクロサービスのアーキテクチャを考えるワークショップがあったのですが、自分たちが考えたアーキテクチャのどの部分がIDEALSのどれを満たしているかを質問されてあんまりIDEALSを意識して検討できていなかったことに気が付きました。今後実践する際には、この5つの原則を頭の片隅に入れながら検討すると良さそうです。
以上、Joe Yoder : Domain modeling techniques for designing microservices 研修参加レポでした。 実務ではDDDもマイクロサービスも遠い存在なのですが、研修の最後に言っていた「DDDを使用するかどうか、またはマイクロサービスを作成しているかどうかに関わらず、ビジネス機能またはドメインを中心にモデル化する、集約などの概念を使ってドメインをモデル化することは有用である」という言葉を胸に実践していければと思います。