読後レビュー|『現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法』

こんにちは、Nash です。

この記事は 『現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法』 のレビュー・書評の記事になります。

では、見ていきます。

この本はどんな本?

日本最大級の求人サイトなどの主任設計をしてきた著者が現場を通して学んだ経験・技術・知識などを「なぜ」を踏まえながら解説している技術書になります。技術だけではなくリアルの現場で通用するために必要なソフトなスキルなどについても合わせて紹介されています。

個人的な感想として、この本で一言で説明するなら 「OOP + DDD のエッセンスを実際のアプリケーションに落とし込むには」 という観点の本だと思いました。

読んだ版は「初版」です。

この本は誰が書いたの?

この本の著者の増田 亨さんは日本最大級で 60 万件以上の求人情報サイト「イーキャリア JobSearch」の主任設計者などのの数多くの経験を持つソフトウェアエンジニア・アーキテクトです。

この本では、過去の経験を通じたリアルな内容になっています。

この本の目次

この本の目次は下記のようになっています。

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

この本から得られること

この本を読むことで下記のことが得られたと感じました。

  • DDD・イベントソーシング・CQRS などのモダンな技術ナレッジ
  • 「なぜ」それらが必要なのかを理解できる
  • 前提として広く使われている OOP の重要性を確認できる
  • リアルでモダン技術を適用するためのソフトスキルのアプローチ

この本はだれが読むべき?

この本を読んでみた結果の個人的なおすすめ読者としては下記のような人かと思いました。

  • リーダブルコードの次の本を探している人
  • DDD を知りたい人の入門本を探している人
  • 実際のドメインをコードに落とし込むところで苦戦してる人

ここらへんの理由については、本の概要などを踏まえて後ほど説明していきます。

だれが読んだの

この本を読んだ私の簡単な自己紹介です。

SIer でメガバンクを顧客にした金融系 SE として活動したのち Web 系へ転職。 自社サービス・受託システムの両方で開発・マネジメントを経験した後、エンジニアリングを中心にしたフリーランスとして活動しているソフトウェアエンジニアです。

書評

では、自分が読んだ結果の評論を書いていきます。

「なぜ」にフォーカスされている

OOP について具体的なコードを交えながらも「なんでこうするべきなの?」という 理由にも強くフォーカスされて説明されています 。なので、本を読み進めるだけで「そうそう、OOP ってこうあるべきだよね」という理解が進みやすいです。

OOP だけでなくて、DDD の説明などにおいてもこの本を通して全体的に「なぜ」という説明フォーカスされているように感じました。そのため納得感をもって本を読み進めることができるかと思います。

DDD 入門としての本

この本は DDD についても説明がされている本となっています。

その中でも大事な観点などは 実際のコードを使いながら説明 されています。そのため、DDD の入門としても良さそうでした。

ただ注意点として DDD のすべてを網羅した本・説明ではないと思います。例えば、アプリケーションサービス・ドメインサービスなどの説明がなかったので。

この本の立ち位置としては DDD におけるコア・重要なポイントに絞られている説明なので、DDD の入門として手軽に知りたい人にはよく合いそうかと思いました。

ソフトスキルの重要性

この本では技術だけではなくソフトスキルの重要性とナレッジについても良く語られています。

全体的には技術寄りのトピックではありますが、「ドメインをどうやってシステムに落とし込むか?」という ソフトスキル的な範囲 も書かれています。そのため、実際に問題が遭遇したときにどういう立ち振る舞いをすればよいのかまでイメージができるため現場感を持ちながら本を読み進めることができるかと思います。

説明がやや冗長+わかりにくい箇所もある

個人的には、説明が 「やや婉曲でわかりにくいなー、、、」 と感じる点もいくつかありました。

そのため、ボーっとしながら上からダラダラ読んでもスッと頭に入ってこなかったです。理由として、すべての物事を細かくかつ正確な日本語で説明しすぎてるのかなー、という印象でした。

そういう場合はダラダラ読むのではなくてきちんと集中しながら何度も読めばきちんと理解できるので、やや真面目な雰囲気な本かと思います。

2021 年の現代の理想論に近い技術・アーキテクチャ

この本で紹介されている設計・技術は個人的には「 2021 年の現代における理想論に近い設計・技術 」をいろいろと紹介されているように感じました。

まずこの本ではシステム開発をするときにどのような設計・技術を使うべきかなどについてもいろいろと書かれています。具体的には下記のようなものです。

  • DDD
  • イベントソーシング
  • CQRS

この本の各解説においては、これらを実際の現場で使うことを理由を交えながら推奨されています。ただ、少し問題があるとすれば 2021 年の現代においてこれらの技術・設計を使ったアプリケーションはまだまだ少ない点です。

私は過去にメガバンクのシステムからスタートアップ界隈まで開発の現場で経験してきました。メガバンクのオールドファッションのシステムはもちろんのことですがモダンな技術を取り入れるスタートアップの界隈でもこれらの技術はまだまだ少ないように感じます。

理由として、下記のようなものが挙げられるかと思っています。

  • 実装コスト、学習コスト、開発難易度が高い
  • 有識者、ナレッジが少ない

ですが、現場でいますぐに使われていないのとは別に「 現代の理想論に近い設計・技術を知っておくべきだと思います 」。設計・技術の選択肢は常に増やしておくべきですし、それがモダンで優れているものならなおさらです。

この本では、そのようなモダンな技術・設計について学べられる本かと思いました。

表示に関心を持つ Decorator もすべてドメインオブジェクトに含める

(ここの項目は実装寄りの学びの内容です)

「表示に関心を持つ Decorator もすべてドメインオブジェクトに入れるべき」という点について学びがありました。

まず「表示に関する Decorator」ですが、例えばあるモデルについてユーザーへなにかデータを表示したいときがあると思います。このようなときに「データが見つかりませんでした」「x 件が見つかりました」などの判断ロジックだけではなく、そのテキスト自体もドメインモデルの内部で管理するべきとのことです。

今までは Decorator レイヤーを作成していたし、そもそもドメインオブジェクトが持つべき関心ではないと思っていたので学びがありました。理由として、そもそもこの設計だとビューとモデルの分離の原則に違反していますが、それよりも関心を1つにまとめることのほうがメリットが大きいからとのことでした。

ほかの本と比較

この本は様々なモダンの技術・設計について広く語られている本です。

自分がこの本を読んだきっかけが「DDD を知りたいなら、入門としてこの本をおすすめ」として紹介されて読んだ経緯です。

ただ、個人的には「DDD 入門をしたい」という1点に集約されているなら下記の記事やその記事の著者の本のほうがおすすめできるかと思います。

理由として、これらの記事・本は「わかりやすく DDD 入門」という一点に絞られているからです。

もし、より広い範囲の技術ナレッジやそれをリアルにどう落とし込むか?などを知りたいなら、いまこの記事で紹介している「現場で役立つシステム設計の原則」の方をおすすめします。

おわりに

OOP、DDD、CQRS、イベントソーシングなどの解説が広くされており、具体的にドメインをアプリケーションに落とし込むところなどをリアルにも解説されている面白い本でした。全体的に現代の設計において重要な知識を広く理由・背景も踏まえて説明してくれる本です。

気になった人は一読してみるのもよいかと思います。

この本から得られること

  • DDD・イベントソーシング・CQRS などのモダンな技術ナレッジ
  • 「なぜ」それらが必要なのかを理解できる
  • 前提として広く使われている OOP の重要性を確認できる
  • リアルでモダン技術を適用するためのソフトスキルのアプローチ

この本はだれが読むべき?

  • リーダブルコードの次の本を探している人
  • DDD を知りたい人の入門本を探している人
  • 実際のドメインをコードに落とし込むところで苦戦してる人