---
# System prepended metadata

title: DDD Chapter 1

---

|Date|Chapter|
|----|--------------|
|2020/09/07|1|

---

# DDD Chapter 1

### ドメイン駆動設計(DDD)とは

* ソフトウェアを利用する業界・組織固有の知識を、ソフトウェアに反映させるための手法。
    * 「有用な知識をコードに落とし込む」手法。
* 有用な知識とは
    * 例）トラック
    * トラックの構成要素
        1. 積載量
        1. 燃費
        1. 「トラック」の語源
    * （一般的に）1,2はソフトウェアに価値のある知識、3はソフトウェアに価値の無い知識

* ドメイン
    * 直訳すると「領域」の意を持つ。プログラムを適用とする対象となる領域を見極めることが重要。
    * システムによってドメインは大きく異なる。
    * 例）会計システム
        * 金銭
        * 帳票
    * 例）物流システム
        * 倉庫
        * 貨物
        * 輸送手段
* HowよりW2
    * k8sやGAEの利用 "How" も重要ではあるが、"What" "Why"の部分に目を向ける姿勢が重要。
    * 何が必要か、なぜ必要か
* モデル
    * 現実の事象、概念を抽象化した概念
    * 現実を観察して現れる事柄「事象」、現実を観察した時に現れる基本的な事柄「概念」から、重要な情報を抽出（抽象化）した結果。
    * 例）トラック
        * ガソリン残量・積載量・装飾・ルート・年式・走行距離
        * トラックを「交通手段」としてしか見ていないユーザにとって、どの項目が重要か？
    * 重要な要素を抜き出したモデルを「ドメインモデル」と呼ぶ。
* ドメインオブジェクト
    * ドメインモデルをソフトウェアで動作するモジュールに置き換えたもの
    * `ドメインの概念⇄ドメインモデル⇄ドメインオブジェクト`　の関係性で改善を繰り返す。iterativeな開発。
* まとめ
    * DDDは開発者のみでは完結しない
    * 「動かし続ける」ことに焦点を当てている
        * （一般的に）納品時は目に見える成果が無い、運用する上で成果が見えてくる
