ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法

Book description

ドメイン駆動設計はエリック・エヴァンスにより提唱されたソフトウェア設計の手法です。対象とする事業活動(ドメイン)とその課題の観点から、より良いソフトウェアを構築するために関係者が協力する方法を提供します。本書は4部構成になっており、第Ⅰ部「設計の基本方針」では、ソフトウェアの設計方針を大きな視点から決めるための考え方とやり方を取り上げます。第Ⅱ部「実装方法の選択」ではソースコードに焦点を合わせ、業務ロジックをどう実装するかの選択肢を学びます。第Ⅲ部「ドメイン駆動設計の実践」では、ソフトウェア開発の現場にドメイン駆動設計を実践的に取り入れるための方法を紹介します。第Ⅳ部「他の方法論や設計技法との関係」では、ドメイン駆動設計とそれ以外の方法論や設計技法との関係を検討します。最新の技術トレンドを取り入れながら、ドメイン駆動設計の基本概念と実践方法をわかりやすく解説します。

Table of contents

  1. 表紙
  2. 訳者まえがき
  3. 推薦の言葉
  4. 序文
  5. この本について
  6. はじめに
  7. 目次
  8. 第Ⅰ部 設計の基本方針
  9.  1章 事業活動を分析する
  10.   1.1 事業領域(ビジネスドメイン)とは何か
  11.   1.2 業務領域(サブドメイン)とは何か
  12.    1.2.1 業務領域を分類する
  13.    1.2.2 業務領域を比較する
  14.    1.2.3 業務領域の境界を明確にする
  15.   1.3 事業分析の具体例
  16.    1.3.1 ライブチケット社
  17.    1.3.2 バス・オンデマンド社
  18.   1.4 業務エキスパート
  19.   1.5 まとめ
  20.   1.6 演習問題
  21.  2章 業務知識を発見する
  22.   2.1 事業の課題
  23.   2.2 知識の発見
  24.   2.3 意図の伝達
  25.   2.4 「同じ言葉」とは何か?
  26.   2.5 業務で使う言葉
  27.    2.5.1 同じ言葉の使い方
  28.    2.5.2 一貫性
  29.   2.6 事業活動のモデル
  30.    2.6.1 モデルとは何か
  31.    2.6.2 効果的なモデル
  32.    2.6.3 事業活動のモデルを作る
  33.    2.6.4 継続的に取り組む
  34.    2.6.5 道具の利用
  35.    2.6.6 困難に立ち向かう
  36.   2.7 まとめ
  37.   2.8 演習問題
  38.  3章 事業活動の複雑さに立ち向かう
  39.   3.1 異なるモデルの混在
  40.   3.2 区切られた文脈とは何か
  41.    3.2.1 文脈の境界
  42.    3.2.2 同じ言葉の定義(改良版)
  43.    3.2.3 区切られた文脈の大きさをどうするか
  44.   3.3 区切られた文脈と業務領域の関係
  45.    3.3.1 業務領域
  46.    3.3.2 区切られた文脈
  47.    3.3.3 業務領域と区切られた文脈の対応
  48.   3.4 文脈の境界
  49.    3.4.1 物理的な境界
  50.    3.4.2 所有権の境界
  51.   3.5 現実世界の区切られた文脈
  52.    3.5.1 言葉の意味論
  53.    3.5.2 科学
  54.    3.5.3 冷蔵庫を買った時の話
  55.   3.6 まとめ
  56.   3.7 演習問題
  57.  4章 区切られた文脈どうしの連係
  58.   4.1 緊密な協力
  59.    4.1.1 良きパートナー
  60.    4.1.2 モデルの共有
  61.   4.2 利用者と供給者の関係
  62.    4.2.1 従属する関係
  63.    4.2.2 モデル変換装置
  64.    4.2.3 共用サービス
  65.   4.3 互いに独立
  66.    4.3.1 意思疎通の問題
  67.    4.3.2 一般的な業務領域
  68.    4.3.3 モデルの違い
  69.   4.4 文脈の地図
  70.    4.4.1 最新の状態を維持する
  71.    4.4.2 限界
  72.   4.5 まとめ
  73.   4.6 演習問題
  74. 第Ⅱ部 実装方法の選択
  75.  5章 単純な業務ロジックを実装する
  76.   5.1 トランザクションスクリプト
  77.    5.1.1 実装方法
  78.    5.1.2 それほど単純な話ではない
  79.    5.1.3 トランザクションスクリプトをいつ使うか
  80.   5.2 アクティブレコード
  81.    5.2.1 実装方法
  82.    5.2.2 アクティブレコードをいつ使うか
  83.   5.3 現実的に考える
  84.   5.4 まとめ
  85.   5.5 演習問題
  86.  6章 複雑な業務ロジックに立ち向かう
  87.   6.1 歴史
  88.   6.2 ドメインモデル
  89.    6.2.1 実装方法
  90.    6.2.2 ドメインモデルの部品
  91.    6.2.3 複雑さの扱い方
  92.   6.3 まとめ
  93.   6.4 演習問題
  94.  7章 時間軸でモデルを作る
  95.   7.1 イベントソーシング
  96.    7.1.1 検索
  97.    7.1.2 分析
  98.    7.1.3 真実を語る唯一の情報源
  99.    7.1.4 イベントストア
  100.   7.2 イベント履歴式ドメインモデル
  101.    7.2.1 利点
  102.    7.2.2 欠点
  103.   7.3 よくある質問
  104.    7.3.1 性能
  105.    7.3.2 データの削除
  106.    7.3.3 他のやり方ではだめですか?
  107.   7.4 まとめ
  108.   7.5 演習問題
  109.  8章 技術方式
  110.   8.1 業務ロジックと技術方式
  111.   8.2 レイヤードアーキテクチャ
  112.    8.2.1 プレゼンテーション層
  113.    8.2.2 業務ロジック層
  114.    8.2.3 データアクセス層
  115.    8.2.4 レイヤー間の通信
  116.    8.2.5 レイヤードアーキテクチャの派生型
  117.    8.2.6 レイヤードアーキテクチャをいつ使うか
  118.   8.3 ポートとアダプター
  119.    8.3.1 概念の整理
  120.    8.3.2 依存関係逆転の原則
  121.    8.3.3 インフラストラクチャ層のコンポーネントとの連係
  122.    8.3.4 ポートとアダプターの同類
  123.    8.3.5 ポートとアダプターをいつ使うか
  124.   8.4 コマンド・クエリ責任分離
  125.    8.4.1 目的別のモデリング
  126.    8.4.2 実装
  127.    8.4.3 読み取りモデルの投影方法
  128.    8.4.4 課題
  129.    8.4.5 モデルの隔離
  130.    8.4.6 コマンド・クエリ責任分離をいつ使うか
  131.   8.5 スコープ
  132.   8.6 まとめ
  133.   8.7 演習問題
  134.  9章 通信
  135.   9.1 モデルの変換
  136.    9.1.1 状態なしのモデル変換
  137.    9.1.2 状態ありのモデル変換
  138.   9.2 集約どうしの連係
  139.    9.2.1 送信箱
  140.    9.2.2 サーガ
  141.    9.2.3 プロセスマネージャー
  142.   9.3 まとめ
  143.   9.4 演習問題
  144. 第Ⅲ部 ドメイン駆動設計の実践
  145.  10章 設計の経験則
  146.   10.1 経験則
  147.   10.2 区切られた文脈
  148.   10.3 業務ロジックの実装方法
  149.   10.4 技術方式の選択
  150.   10.5 テストの基本方針
  151.    10.5.1 ピラミッド形
  152.    10.5.2 ダイヤモンド形
  153.    10.5.3 逆ピラミッド形
  154.   10.6 実装方法の判定
  155.   10.7 まとめ
  156.   10.8 演習問題
  157.  11章 設計を進化させる
  158.   11.1 事業活動の変化
  159.    11.1.1 中核から一般へ
  160.    11.1.2 一般から中核へ
  161.    11.1.3 補完から一般へ
  162.    11.1.4 補完から中核へ
  163.    11.1.5 中核から補完へ
  164.    11.1.6 一般から補完へ
  165.   11.2 設計の基本方針を再検討する
  166.   11.3 業務ロジックの実装方法を見直す
  167.    11.3.1 トランザクションスクリプトからアクティブレコードへ
  168.    11.3.2 アクティブレコードからドメインモデルへ
  169.    11.3.3 ドメインモデルからイベント履歴式ドメインモデルへ
  170.    11.3.4 過去の状態変化を修復する
  171.    11.3.5 移行イベントとして表現する
  172.   11.4 組織の変更
  173.    11.4.1 良きパートナーから利用者と供給者の関係へ
  174.    11.4.2 利用者と供給者の関係から互いに独立へ
  175.   11.5 業務知識
  176.   11.6 システムの成長
  177.    11.6.1 業務領域
  178.    11.6.2 区切られた文脈
  179.    11.6.3 集約
  180.   11.7 まとめ
  181.   11.8 演習問題
  182.  12章 イベントストーミング
  183.   12.1 イベントストーミングとは何か
  184.   12.2 誰がイベントストーミングに参加するべきか
  185.   12.3 イベントストーミングに必要なもの
  186.   12.4 イベントストーミングのプロセス
  187.    12.4.1 ステップ1:発散的に探索する
  188.    12.4.2 ステップ2:時系列に並べる
  189.    12.4.3 ステップ3:問題点を洗い出す
  190.    12.4.4 ステップ4:転換イベントを見つける
  191.    12.4.5 ステップ5:コマンドを見つける
  192.    12.4.6 ステップ6:ポリシーを定義する
  193.    12.4.7 ステップ7:読み取りモデルを見つける
  194.    12.4.8 ステップ8:外部システムを追加する
  195.    12.4.9 ステップ9:集約を見つける
  196.    12.4.10 ステップ10:区切られた文脈に分割する
  197.   12.5 いろいろなやり方
  198.   12.6 イベントストーミングをいつ使うか
  199.   12.7 ファシリテーションのコツ
  200.    12.7.1 変化に注目する
  201.    12.7.2 リモートでのイベントストーミング
  202.   12.8 まとめ
  203.   12.9 演習問題
  204.  13章 現実世界のドメイン駆動設計
  205.   13.1 戦略的な分析
  206.    13.1.1 事業活動を理解する
  207.    13.1.2 既存システムの構造を調べる
  208.   13.2 設計改善の基本方針
  209.    13.2.1 基本方針の改善
  210.    13.2.2 実装方法の改善
  211.    13.2.3 同じ言葉を育てる
  212.   13.3 実践的なドメイン駆動設計
  213.   13.4 ドメイン駆動設計を売り込む
  214.    13.4.1 ドメイン駆動設計を非公式に取り入れる
  215.   13.5 まとめ
  216.   13.6 演習問題
  217. 第Ⅳ部 他の方法論や設計技法との関係
  218.  14章 マイクロサービス
  219.   14.1 サービスとは何か?
  220.   14.2 マイクロサービスとは何か?
  221.    14.2.1 「メソッド単位のサービス」が完璧なマイクロサービスか?
  222.    14.2.2 設計の目的
  223.    14.2.3 システムの複雑さ
  224.    14.2.4 マイクロサービスの深さ
  225.    14.2.5 深いモジュール
  226.   14.3 ドメイン駆動設計とマイクロサービスの境界
  227.    14.3.1 区切られた文脈
  228.    14.3.2 集約
  229.    14.3.3 業務領域
  230.   14.4 公開インターフェースを小さくする
  231.    14.4.1 共用サービス
  232.    14.4.2 モデル変換装置
  233.   14.5 まとめ
  234.   14.6 演習問題
  235.  15章 イベント駆動型アーキテクチャ
  236.   15.1 イベント駆動型アーキテクチャとは?
  237.   15.2 イベント
  238.    15.2.1 イベント、コマンド、メッセージ
  239.    15.2.2 データ構造
  240.    15.2.3 イベントのカテゴリー
  241.   15.3 イベント駆動型の連係を設計する
  242.    15.3.1 分散した大きな泥団子
  243.    15.3.2 時間的な結合
  244.    15.3.3 機能的な結合
  245.    15.3.4 実装の結合
  246.    15.3.5 イベント駆動型連係のリファクタリング
  247.    15.3.6 イベント駆動型で設計する経験則
  248.   15.4 まとめ
  249.   15.5 演習問題
  250.  16章 データメッシュ
  251.   16.1 分析系データモデルと業務系データモデル
  252.    16.1.1 事実テーブル
  253.    16.1.2 特性テーブル
  254.    16.1.3 分析系モデル
  255.   16.2 分析系データの管理基盤
  256.    16.2.1 データウェアハウス
  257.    16.2.2 データレイク
  258.    16.2.3 データウェアハウスとデータレイクの課題
  259.   16.3 データメッシュ
  260.    16.3.1 データを業務の視点で分割する
  261.    16.3.2 データをプロダクトと考える
  262.    16.3.3 自律性を高める
  263.    16.3.4 エコシステムを構築する
  264.    16.3.5 データメッシュとドメイン駆動設計を組み合わせる
  265.   16.4 まとめ
  266.   16.5 演習問題
  267.  結びの言葉
  268.   課題
  269.   解決方針
  270.   実現手段
  271.   さらに学ぶために
  272.   より進んだドメイン駆動設計
  273.   アーキテクチャと連係方法
  274.   既存システムの改善
  275.   イベントストーミング
  276.   最後に
  277.  付録A ドメイン駆動設計の実践:事例研究
  278.   A.1 五つの区切られた文脈
  279.    A.1.1 マーケットノバス社の事業活動
  280.    A.1.2 区切られた文脈 その1:販売促進
  281.    A.1.3 区切られた文脈 その2:顧客管理
  282.    A.1.4 区切られた文脈 その3:イベント処理装置
  283.    A.1.5 区切られた文脈 その4: 販売報奨金
  284.    A.1.6 区切られた文脈 その5:マーケティングハブ
  285.   A.2 ふりかえり
  286.    A.2.1 同じ言葉
  287.    A.2.2 業務領域
  288.    A.2.3 区切られた文脈の境界
  289.   A.3 まとめ
  290.  付録B 演習問題の回答
  291.   第1章
  292.   第2章
  293.   第3章
  294.   第4章
  295.   第5章
  296.   第6章
  297.   第7章
  298.   第8章
  299.   第9章
  300.   第10章
  301.   第11章
  302.   第12章
  303.   第13章
  304.   第14章
  305.   第15章
  306.   第16章
  307. 参考文献
  308. 著者紹介
  309. 奥付

Product information

  • Title: ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法
  • Author(s): Vlad Khononov, 増田 亨, 綿引 琢磨
  • Release date: July 2024
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784814400737

You might also like

book

サイトリライアビリティワークブック ―SREの実践方法

by Betsy Beyer, Niall Richard Murphy, David K. Rensin, Kent Kawahara, Stephen Thorne, 澤田 武男, 関根 達夫, 細川 一茂, 矢吹 大輔, 玉川 竜司

『SRE サイトリライアビリティエンジニアリング』で、サイトリライアビリティエンジニアリング(SRE)はプロダクションサービスの稼働と信頼性の維持がサービス設計の基本であるとし、行動の基礎となる原則と理論を述べました。その実践編であり副読本でもある本書は、SREを組織やプロジェクトで導入するにあたり、必要となる具体的な方法や手順を解説します。またこれまでGoogle内部で得た技術的ノウハウを解説し、さらにEvernote、The Home Depot、New York Timesなどさまざまな企業での事例を紹介します。

book

PythonによるAIプログラミング入門 ―ディープラーニングを始める前に身につけておくべき15の基礎技術

by Prateek Joshi, 相川 愛三

近年ディープラーニングが爆発的人気となっています。しかし、人工知能の手法はディープラーニングに限りません。過去のAIブームの単純なニューラルネットや論理プログラミングもあれば、遺伝的アルゴリズム、自然言語処理、音声信号処理や、画像からの動物体検出、分類問題、回帰問題、連続データ解析、強化学習といった、古典的なデータ解析や機械学習の手法もあります。これらはディープラーニングを始める前に身につけておくべき基礎技術です。「鶏を割くに焉んぞ牛刀を用いん」の諺のように、読者がデータ収集や計算コストがかかるディープラーニングの他にも適材適所の手法を選択できるよう、本書ではさまざまな人工知能の関連分野を扱いながら、Pythonでよく使われるライブラリの基本的な使い方を解説します。

book

入門 機械学習パイプライン ―TensorFlowで学ぶワークフローの自動化

by Hannes Hapke, Catherine Nelson, 中山 光樹

機械学習を用いた本番システムの構築には、データの前処理やモデルの学習、デプロイなどのステップが必要です。しかし、これらのステップは手動で実行されることが多く、エラーの原因となっています。そこで本書では、TensorFlowのエコシステムを使用した機械学習パイプラインの構築方法について学びます。パイプラインを用いて各ステップを自動化することで、レガシーなシステムの保守から解放され、新しいモデルの開発に集中できるようになります。

book

機械学習システムデザイン ―実運用レベルのアプリケーションを実現する継続的反復プロセス

by Chip Huyen, 江川 崇, 平山 順一

ビジネスとしての機械学習システムの設計や運用についての解説書。本書では、機械学習の最前線で活躍する著者の豊富な経験と知識に基づき、エンド・ツー・エンドの機械学習システムを設計・構築するための基本原則を明らかにします。訓練データの処理方法、特徴の使い方、モデルを再訓練する頻度、監視すべき項目……このような設計上の決定がシステム全体の目的達成にどのように寄与するのかを、実際のケーススタディを通じて理解します。機械学習プロジェクトを成功に導く上で必要な信頼性、拡張性、保守性、およびビジネス要件の変化への適応性を備えた機械学習システムを設計する包括的なアプローチを本書で学ぶことができます。