そこに仁義はあるのか(仮)

略してそこ仁!

ドメイン駆動設計の入門にオススメ!「現場で役立つシステム設計の原則」読んだ

エリック・エヴァンスのドメイン駆動設計の本を読みまして、たくさんのプラクティスを知れました。ただ、実際にどうやって開発を進めていけばいいんだろうというのは、この本ではあまりイメージするのが難しいと感じていました。
そんなときに、「現場で役立つシステム設計の原則」を改めて読み返してみよう!と、読んでみて、めちゃくちゃ読みやすかったし丁寧だったので感動しました…!

🙆‍♀️ こんな人にオススメ

ドメイン駆動設計に興味がある人・オブジェクト指向を始めたい人・より良いコードを書きたいと思っている人にオススメです。

エリック・エヴァンスのドメイン駆動設計は初心者向けではないので、まずこの本で取っ付き始めるのがいいのではないでしょうか。
また、エヴァンス本を読んだ後も、実際にどうやって開発していけばいいんだろう?に応えてくれる内容ですし、書籍の中で使われているドメイン駆動設計の言葉の理解度も深まると思うので、そんな人にもオススメ。

📖 目次

  • 第1章 小さくまとめてわかりやすくする
  • 第2章 場合分けのロジックを整理する
  • 第3章 業務ロジックをわかりやすく整理する
  • 第4章 ドメインモデルの考え方で設計する
  • 第5章 アプリケーション機能を組み立てる
  • 第6章 データベースの設計とドメインオブジェクト
  • 第7章 画面とドメインオブジェクトの設計を連動させる
  • 第8章 アプリケーション間の連携
  • 第9章 オブジェクト指向の開発プロセス
  • 第10章 オブジェクト指向設計の学び方と教え方

📖 どんなことが書いてあるか

各章で書かれていることをざっくりと。書籍の中ではコードも交えつつ、丁寧に解説されています。

第1章 小さくまとめてわかりやすくする

ソフトウェア全体をすっきりした形に整えることが大切
どこに何が書いてあるのかをわかりやすくすることで、修正や拡張がしやすい安全なコードができる

第2章 場合分けのロジックを整理する

場合分け(if文など)のロジックがあると、コードが複雑になって変更しにくくなる
特に「区分」ごとに処理をする場合は、if文やswitch文ができてしまってコードの見通しが悪くなる
早期リターンや多態、列挙型などを使ってスッキリとしたコードにする

第3章 業務ロジックをわかりやすく整理する

データクラス(getter と setter があるだけのクラス)を作り、それをいろんなレイヤーでロジックを書いて使い回すようにすると、どのクラスにどのロジックが書かれているのかの見通しが悪くなる。
データとロジックを同じクラスに書くことで、重複もなくなり、見通しも良くなる。

第4章 ドメインモデルの考え方で設計する

ドメインモデルを開発するためには、「分析」と「設計」という2つの活動が必要。
ドメインオブジェクトを見つけるには業務の関心ごとを「ヒト」「モノ」「コト」に分類するとわかりやすい。特に「コト」に注目して整理すると、基本的な業務の流れが掴みやすくなる。
業務を理解し、設計を段階的に改善していこう

第5章 アプリケーション機能を組み立てる

アプリケーション層を作るときに意識することが書かれている。
アプリケーション層は油断するとすぐにログっくが複雑になるので、シンプルに保つために設計の徹底が重要
画面が多様になる場合は、登録系・参照系にわけて考え、小さく分けて整理するのが基本。

第6章 データベースの設計とドメインオブジェクト

データの設計が拙いデータベースはプログラムを複雑にする。設計をすっきりしてわかりやすくさせるためのプラクティスが書かれている。

第7章 画面とドメインオブジェクトの設計を連動させる

画面は利用者の関心ごとのかたまり。
ドメインオブジェクトは利用者の関心ごとのかたまり。
なので、画面とドメインオブジェクトは同じ関心ごとの異なる表現であり、連動させるとソフトウェアの変更が楽で安全になる。

第8章 アプリケーション間の連携

アプリケーション連携はここのアプリケーションの価値を高め、競合に対して優位性を保つために重要になる。
そのための連携パターンが紹介されている。

第9章 オブジェクト指向の開発プロセス

オブジェクト指向らしい開発の進め方が書かれている。
オブジェクト指向では、分析・設計・実装・テストの全ての工程を同じチームが一貫して担当する。
請負、准委任というの契約の種類などにも言及されている。

第10章 オブジェクト指向設計の学び方と教え方

これから自分のスキルにするための取り組み方が書かれている。
「既存のコードを改善しながら学ぶ」方法と「やや極端な規則を使って体で覚える」方法の2つが紹介されている。
後者はなかなかスパルタなルールが書かれていて面白い。

💬 まとめ

読みやすくてサクサク読めるし、コードのわかりやすい書き方だけでなく、幅広い範囲のプラクティスが丁寧に書かれていました。
「まずこれ読んだ方がいいよ。」とオススメしたくなる一冊でした!