ドメイン駆動設計に至った過程

公開日:2019-06-30
最終更新:2019-07-15

私がドメイン駆動設計(DDD)に至った過程を整理して、あらわしました。
もし、開発で何か違和感を感じて、しっくり来ていない人や
何かが足りないでうまく行かない人の指針になれば幸いです。

コードでの苦闘

  • コードのことで悩み、実装パターンなど読み始める。同時にデザインパターンについても学び始める。
  • また、リファクタングについても知る。
  • リファクタリング プログラムの体質改善テクニックとパターン指向リファクタリング入門なども読んでいく。
  • にも関わらず、コードの実装などで、何かしっくり来ない部分があった。

設計での苦闘

  • MVCにおいて、機能追加、バグフィックスといった変更に対しての実装に悩み始める。
  • 実装をControllerに置くべきか、Modelに置くべきかが悩みの焦点。
  • というのもこのロジックはControllerやModelという概念に当てはまるのかという違和感が頭から離れなかった。
  • またもや、しっくり来ず、処理を実装していく。
  • しかし、そのために徐々にFatController、FatModelになるのとControllerとModelが混じりあうような傾向が出てくる。

何がしっくり来なかったのか

  • 例えると、木(コード)を植えていき、森ができあがるが、俯瞰してみると歪な森となっている。
  • 木(コード)を一本づつ植えて、『あ』の形をした森にしたいと思った時、木(コード)をどの位置に植えるかを考える必要がある。
  • しかし、この『あ』の形をした森にするために木(コード)を植えるのが思うようにできない。

コードと設計の結び付きの気付き

  • 違和感の正体について

    • 自分の中でコードでの苦闘と設計での苦闘で感じた違和感について考え始める。
    • 自分の言葉で言い換えれば『コードと設計の断絶』というのが違和感の正体。
    • コードと設計がうまく結び付けられておらず、断絶していた。橋渡しができていない。
    • コードと設計を結びつけられることができる考えが必要であること気付く。
  • ドメイン駆動設計に至る

    • コードと設計を結びつけられることができる考えを調査し始めて、ドメイン駆動設計のことを知る。
    • ドメイン、ドメインモデル、ユビキタス言語などを知り、今までのことが当てはまりピンと来る。
    • 自分の中にあった違和感が解消され、自分の中でドメイン駆動設計が大きく占めることになる。

ドメイン駆動設計で感じたこと

  • 関心事をどう捉えるか

    私見と自分の経験からになりますが、関心事(ドメイン)を
    どう捉えるかが大事で、ひいてはドメインオブジェクト、
    ドメインモデルに影響します。

    私見になりますが、これらを発見していくのに
    必要なのがユビキタス言語です。

  • ユビキタス言語を持つ大事さ

    ユビキタス言語は非常に重要で、職種が違えば(例:エンジニアと営業)尚更ですが、
    エンジニア同士であってもユビキタス言語を持つべきであり、
    ユビキタス言語の定義を統一しておくべきです。

    例えばですが、2008年より前は1バイト=1オクテットではなく、
    1オクテット=8ビットですが、2008年に1バイト=8ビットとなるまでは
    1バイトは処理系に依存しています。
    最もその当時でも大多数は1バイト=8ビットではあると思います。

    ですが、もし、そうでなかった場合、1バイト=1オクテットではなく、
    処理系に依存しての実装がされていたら、どうなるでしょうか。

    こう考えるとユビキタス言語が如何に重要であり、
    チームで開発する時に定義を統一しておく必要があるかと思います。

  • 境界づけられたコンテキスト

    ある程度の規模のシステムの開発経験がある人は
    重複していたコードを共通化したが、開発が進むと
    共通化したことでかえって開発しにくくなり、
    変更に弱くなったことはありませんでしょうか。

    この辺りについてはドメイン駆動設計での境界づけられたコンテキストの考え方が
    自分にはしっくり来て、これはまた、別途、説明したいと思います。

自分の経験から必読のドメイン駆動設計の書籍や関連書籍はどんな順で読めばいいか

  • 必読
    • 現場で役立つシステム設計の原則 変更を楽で安全にするオブジェクト指向の実践技法
      • 日本語で、ドメイン駆動設計を調べているとお名前を目にしないことはない増田さんの著作。
      • まずは、ドメイン駆動設計のさわりだけでも知りたいという方にお勧め。
      • 書籍自体もコンパクトで持ち運びにも便利です。
    • 「実践ドメイン駆動設計」から学ぶDDDの実装入門
      • 後述のIDDD本やDDD本を翻訳本を出版されている翔泳社様から出版されている書籍。
      • 初めて読む人にはIDDD本やDDD本にどんなことが書かれているかを知るのに便利です。
      • 既にIDDD本やDDD本を読んでいる人は確認などにも使えます。
      • 紙の書籍はこちらもコンパクトで持ち運びにも便利です。
    • 実践ドメイン駆動設計
      • IDDD本と称されています。
      • 実践とあり、DDD本よりも実務でドメイン駆動設計を必要としている方向けです。
    • エリック・エヴァンスのドメイン駆動設計
      • DDD本と称されています。
      • どちらかといえばドメイン駆動設計の考え方や概念が中心です。
    • NETのエンタープライズアプリケーションアーキテクチャ 第2版
      • 私見としてはC#と.NETの本というより、IDDD本に似た感じです。
      • 特に重複しているビジネスコンテキストを実際にどのように扱うかの解説は必見です。
      • また、ドメイン駆動設計との関連で、CQRSについての解説もあります。
    • Clean Architecture 達人に学ぶソフトウェアの構造と設計
      • 私見としては依存について、アーキクテクチャはどうあるべきか、わかる書籍と思います。
      • 第22章にて書名でもあるクリーンアーキクテクチャとして解説されています。
  • 関連書籍(できれば読んでおくといいもの)

    • ドメイン駆動 デザインパターンへの適用法
      • C#と.NETを使用してDDD、TDD(テスト駆動開発)、AOP(アスペクト指向プログラミング)の解説をしています。
      • 私見としてはC#と.NETを使ってのDDDの解説なら、先述のNETのエンタープライズアプリケーションアーキテクチャ 第2版の方が良いと思います。
    • Adaptive Code ~ C#実践開発手法 第2版
      • C#での実践開発手法とありますが、ドメイン駆動設計、CQRSの解説があります。
      • ですが、むしろSOLID原則の解説が中心です。
  • 開発自体に慣れてなく、これからドメイン駆動設計を知りたい方

    • 現場で役立つシステム設計の原則 変更を楽で安全にするオブジェクト指向の実践技法
      • まずは、これを読んでください。
      • 恐らく、ドメイン駆動設計以外にも開発関連の書籍を読まれていると思います。
      • そちらにも労力を割かれていると思いますので、最後まで読み通せるこちらを最初に読んでください。
    • 「実践ドメイン駆動設計」から学ぶDDDの実装入門
      • IDDD本やDDD本はページ数も多く、がっつり取り組む必要があり、途中で挫折する可能性が高いです。
      • ですので、IDDD本やDDD本にどんなことが書かれているか、概要レベルでもいいので、こちらを読んで完全でなくても押さえられればいいと思います。
    • 実践ドメイン駆動設計
      • IDDD本はページ数も多いので、読み通すのにも苦労します。
      • もし、自分の理解が正しいかの確認については「実践ドメイン駆動設計」から学ぶDDDの実装入門に戻って、再読するのがいいと思います。
    • エリック・エヴァンスのドメイン駆動設計
      • 最後にDDD本となります。
      • 読み終わった書籍とDDD本を交互に見て、理解を含めるのがいいかと思います。
  • ある程度開発経験があり、これからドメイン駆動設計を知りたい方

    • 現場で役立つシステム設計の原則 変更を楽で安全にするオブジェクト指向の実践技法
      • 恐らく、ドメイン駆動設計で必要な部分だけを読んでもらえば問題ないと思います。
    • 実践ドメイン駆動設計
      • 「実践ドメイン駆動設計」から学ぶDDDの実装入門と併読するといいかと思います。
      • また、実務で必要となる部分を精読が良いかもしれません。
    • エリック・エヴァンスのドメイン駆動設計
      • こちらも「実践ドメイン駆動設計」から学ぶDDDの実装入門と併読するといいかと思います。
      • がっつりと取り組む方はIDDD本とDDD本の併読するというのも手かもしれません。
    • 「実践ドメイン駆動設計」から学ぶDDDの実装入門
      • IDDD本やDDD本を読んで、大まかな理解が間違っていないかの確認のために読むのがいいと思います。
      • もしくはIDDD本やDDD本との併読もいいかもしれません。

取り上げた書籍

現場で役立つシステム設計の原則 変更を楽で安全にするオブジェクト指向の実践技法
エリック・エヴァンスのドメイン駆動設計
実践ドメイン駆動設計
「実践ドメイン駆動設計」から学ぶDDDの実装入門
NETのエンタープライズアプリケーションアーキテクチャ 第2版
Clean Architecture 達人に学ぶソフトウェアの構造と設計
ドメイン駆動 デザインパターンへの適用法
Adaptive Code ~ C#実践開発手法 第2版

記事が少しでもいいなと思ったらクラップを送ってみよう!
1
+1
@fubukiの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする