レガシーアプリケーションの特徴
- 異なる名前が同じ意味を持つ、あるいは同じ名前が複数の意味を持つ
- ドメインを跨いだ相互依存がある
- テストがない
- ドメイン固有の複雑さとは別に、技術的な複雑さが積み重なっている
ドメインを再発見するための活動
戦略的な活動(問題空間)と戦術的な活動(解決空間)に分けられる。
戦略的な活動
ドメイン言語の再解釈
レガシーコードには、歪んだドメイン用語がすでに埋め込まれている。以下の観点で見直す。
同名異義 — 同じ名前だが、実は異なる文脈で別の意味で使われている言葉はないか 異名同義 — 異なる名前だが、実は同じ概念を指している言葉はないか
例:user と customer、name と title など。
ドメイン境界の再定義
購入処理・決済処理・広告処理などが互いに依存し、境界が曖昧になっていることがある。
ドメインの境界を跨いだ片方向・双方向の依存は変更コストを押し上げる。
また、単一の境界の中に責務が集中しすぎると、それ自体が巨大な複雑さの温床になる。
戦術的な活動
同名の概念を分離する
たとえば user ひとつで担っていた役割を、user と customer に分離する。
テーブル構造が似通っていても、文脈ごとに分けたほうが変更は確実に楽になる。
ファットモデルの発生も防げる。
境界を垂直に切る
水平なレイヤー分割ではなく、ドメイン境界に沿って垂直に分割する。
これがマイクロサービス移行の土台になる。