ドメイン駆動設計(DDD = Domain-Drived Design)とは、なんぞや?

ドメイン駆動設計(DDD = Domain-Drived Design)とは、なんぞや?

PHPカンファレンス2019で初めて聞いた。
調べてみると、オブジェクト指向とかと同じ設計思想らしい。

参考URL:
https://qiita.com/little_hand_s/items/721afcbc555444663247

ドメイン駆動設計とは?
1, ドメイン(*1)の中核となる複雑さと機会に焦点を当てる
2, ドメイン専門家とソフトウェア専門家のコラボレーションでモデルを探求する
3, 明示的にそれらのモデルを表現するソフトウェアを書く
4, 境界付けられたコンテキスト(*2)の中のユビキタス言語(*3)で話す

まず、ドメインが分からん。google.com的な奴とは違うんだろうな…。
調べてみると、ドメイン=業務らしい。なんたらアプリのなんたらの部分。在庫管理アプリなら在庫管理がドメイン

ドメイン = 実際の業務(在庫管理とか)
ドメイン専門家 = 実際に業務をしている人
ソフトウェア専門家 = プログラマ

モデル = 業務の内容を抽象化したもの。必要な機能やデータを決める(クラス・変数・関数などの元になる)
ユビキタス言語 = 用語は厳密に定義しましょう!という事。在庫とは?管理とは?

境界づけられたコンテキスト = 名前空間と同じ概念。在庫と言っても部署や人によって定義が異なるので完全な統一(ユビキタス言語)は無理!
なので、生産部署の在庫、流通部門の在庫、みたいに区別する(境界が部署、コンテキストが在庫)

コンテキストマッピング = コンテキスト同士「生産部署の在庫」「流通部門の在庫」の関係性を定義する。

実装としては、1コンテキスト = 1アプリケーションで作る!らしい。