はらだっちのブログ

プロ意識を持ち続ける。その一環として学んだことをこのブログで日々アウトプットしていきます!

「ドメイン駆動設計 モデリング 実装ガイド」を読んだらDDDの概要が分かった

はじめに

今年度UMLモデリングを学び始めUMTP L3を取得したタイミングで、ドメイン駆動設計(DDD)に手を出したくなり、「ドメイン駆動設計 モデリング 実装ガイド」読みました。知識定着も兼ねて読んだ感想を書き残します。

モチベーション

今年度の目標はプロとして仕事をするエンジニアになる、と思っています。プロとして仕事をするにあたり一番重要なことはモデリング・設計ができることだと思います。良い設計ができるエンジニアに近づくために、DDDの入門として

tech-blog.rakus.co.jp

のブログで紹介されていた

booth.pm

を読むことにしました。

私のレベル

社会人12年目。フロントエンジニア3年目。始めて3年もたったのですがDDDはまだ学んだことが無い初学者です・・・今年度からモデリングを学び始め、まずは2か月UMLの勉強をしてきました。

読書時間

大体6~10時間弱と言った所でしょうか。100ページくらいしかなかったので土日を使ってサクサクっと読めました。直近でモデリングの勉強をしていたことで頭に入ってきやすかったです。

どんなことが学べるのか

DDDにおける概要的な部分と実装イメージが学べたと思います。私は「現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法

や「良いコード/悪いコードで学ぶ設計入門―保守しやすい 成長し続けるコードの書き方 を読んだことがあるのですが、比較すると以下の様に少しずつ内容が異なるので、順番に読んでいくことでより理解が進んだ気がしました。 また、本書は章ごとにQ&Aがあり、読者がつまずきそうな部分について解説してくれているのがとても親切に感じました。

  • 現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法
  • 良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方
  • ドメイン駆動設計 モデリング 実装ガイド
    • DDDの基本的な考え方と実装方針をコードサンプルを交えて紹介。最初にDDD Referenceを引用して言葉の定義をしてくれてる所も良かった。オニオンアーキテクチャを中心に各アーキテクチャ概要についても分かりやすく説明している。

本書を読んでの気づき

  • やはり、設計の根底にはモデリングがあるということに良く気づかされました。本書もモデルの定義から始まり、「model:A system of abstractions that describes selected aspects of a domain andcan be used to solve problems related to that domain問題解決のために、物事の特定の側面を抽象化したもの (意訳)」とDDD Referenceでは定義されていますが、この上手く本質を捉えて抽象化する、というのがいかにうまく出来るかどうかでシステム開発の良し悪しが決まるのだなと感じました。
  • ドメインモデル図における注釈の部分(各属性の詳細仕様)こそが、ドメイン知識であり重要な点だということも良く分かりました。要件定義工程では、概念モデルとして物事を抽象化し問題を捉えますが、そこにはドメイン知識は含まれていなかったりするので、ここを以下にドメインエキスパートから引き出すかがプロダクト開発成功のカギになりそうだと理解しました。
  • 強く整合性を保つ必要性のあるオブジェクト群をひとまとまりの集約と見なす、という考え方は、UMLには出てこなかったので学びになりました。
  • 私は仕事でReact / Next.jsを利用することが多いのですが、紹介されていた各アーキテクチャを踏まえて各層にどのような責務を与えればよいか考えさせられました。以下のような色んな方のブログも参考に考えて行きたいと思いました。 tech.yappli.io

その他

  • 今回は短かったので、本を読み終わった後にコンセプトマップで全体を俯瞰して理解を深めてみました。ドメインイベントなど本書では触れられていないだったり、ドメインサービスの実際の使い方についてイメージが出来ていない部分などもあったので、また別の本を読みながら理解を深めていきたいと思いました。

    おわりに

DDDの入門書としてはとても入りやすい本でした。初学者の方でどこから学んでよいか分からない!と思っている方にはお勧めです。

この本を入りとして段階的に読書を行い、最終的にエヴァンス本も読破していきたいなと思います。最後まで読んでいただきありがとうございました。