泥水エンジニア日記

泥水の数だけ強くなれる

『エリック・エヴァンスのドメイン駆動設計』を読んだ

会社の先輩にオススメされたので読んでみた。抽象的な話が多くて読むのにものすごい時間がかかったんですが、読んどいてよかった。良書でした。

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

そういえば設計ってよくわかってなかった

最近、自社のサービスのコア部分に関するコードをリプレースすることになり、「どうせ書き換えるのであれば、もっと分かりやすくしよう!」と息巻いていたんだけど、コードを書けども書けどもいい感じにならない。綺麗にまとまった!と思った先から情報がもつれてしまう。試行錯誤しながら何とか形にしたんだけど、「何の業務のために何をしているのか」がどうにも分かりにくく、レビューでめちゃめちゃ指摘を受けてしまった。

何でこんなにうまく行かないんだ?と思ったけれど、考えてみれば当然で、そういえば自分はちゃんと設計について学んだことがなかった。

クソ文学部なので、こういう時は本に頼ります。

エリック先生の教え

エリック・エヴァンスが書いていることをすげーざっくりまとめると以下のような感じ。

  • ドメインの実践者(OpsとかBizとかの人)とソフトウェアの実践者(Devの人)による創造的な共同作業を通じて、モデルを探求すること
    • ソフトウェアに現実世界の情報を何でも何でも反映させる必要はなくて、「業務を回す上で重要な情報か」という切り口で取捨選択して、シンプルに抽象化することが大事
    • 良いモデルを見つけるためには、自分たちの知識を意識的に育てて、「継続的学習」を実践することが大事
  • コアドメインに集中すること
    • コアドメインとは、アプリケーションを差別化して価値あるものにする、モデルのもっとも特徴的な部分のこと
    • コアとそれ以外を分けることで、最も価値のある領域に作業を集中させることができる
    • 逆に、本質的じゃない部分について、優先度を下げたり、アウトソーシングしたりする際の指針になる
  • 明示的な境界づけられたコンテキストの内部で、ユビキタス言語を語ること
    • ドメインエキスパートとエンジニアが会話する際は、「この業務についてはこう表現しよう」と決めた共通言語(ユビキタス言語)で話すこと
      • ユビキタス言語が浸透して、会話上でもコード上でも使われるようになると、エンジニアがドメインエキスパートに自分の成果物を見せられるようになる
      • フィードバックループが二者間で完結するようになるので、スピード感を持って開発できる
    • 境界づけられたコンテキストとは、モデルを適用できる限定された範囲のこと
      • ボーダーラインを定めることで、チームメンバは何を一致させるべきで、何を独立して開発できるのか、について理解を明確にできる
      • マイクロサービスにおける、「サービス」の単位と一致させると良さそう?

分かったような気はするけれど、まだ全然実践できる気はしていないので、次は『実践ドメイン駆動設計』を読んでおきたい。

以下、自分用の読書メモです。