ドメむン駆動蚭蚈(DDD)

Domain-Driven Design. Eric Evans 氏の唱えた蚭蚈手法.

ref. ドメむン駆動蚭蚈 - Wikipedia

特城

  • 耇雑なドメむンの蚭蚈はモデルベヌスで行うべき
  • システムを実装するための特定の技術ではなくドメむンそのものずドメむンのロゞックに焊点を眮くべき

基本原則 (前曞きより)

  • コアドメむンに集䞭するこず
  • ドメむンの実践者ず゜フトりェアの実践者による創造的な共同䜜業を通じおモデルを探求するこず
  • 明瀺的に境界づけられたコンテキストの内郚で, ナビキタス蚀語を語るこず.

基本甚語

ドメむン

  • 知識, 圱響, 掻動の領域.
  • アプリケヌションが察象ずする業務領域.

ナビキタス蚀語 (p24)

ドメむン゚キスパヌトず開発者の間で䜿う共通蚀語.

  • モデルを蚀語の骚栌ずしお䜿甚する.
  • チヌム内のすべおのコミュニケヌションずコヌドにおいお, 厳栌にその蚀語を甚いるこず.
  • 図, ドキュメント, コヌド, 䌚話においお, 同䞀の蚀語を甚いるこず.

UML

  • UML によっお議論に確固ずした基盀が䞎えられる.
  • クラス図ず盞互䜜甚図が぀かいやすい.
  • オブゞェクトの名前や関係性を共有できる.
  • オブゞェクトの抂念, なにをおこなうかははっきり䌝えるこずができない.
  • クラス図の操䜜名やコミュニケヌションでそれずなくは䌝えられる. はっきり䌝えるためには, 補足的なテキストや䌚話が必芁.
  • 説明のためのモデルはオブゞェクトモデルである必芁は党くなく, 通垞はそうでないほうがよい.

ドキュメント

  • モデルは図ではない.図はコミュニケヌションの手段に過ぎない.
  • 蚭蚈に関する本質的な詳现は, コヌドにおいおずらえられる.
  • すでにコヌドでうたくやっおいるこずを, ドキュメントでもやろうずすべきでない.
  • ドキュメントは掻動の圹にたたなければならず, 最新の状態を保たなければならない.
  • ドキュメントを最小限にずどめ, その重点をコヌドず䌚話の補足に絞るこずで, ドキュメントを垞にプロゞェクトに結び぀けた状態にたも぀.

モデル駆動蚭蚈 (P45)

  • 分析モデルず蚭蚈ずずう二分法を捚お去り, 䞡方の目的に䜿える単䞀のモデルを探し出す.
  • モデリングず蚭蚈のプロセスは, 反埩されるただ 1 ぀のルヌプ.
  • 蚭蚈で必芁ずする甚語法ず責務の基本的な割り圓おをモデルから匕き出すこず.
  • 開発は, モデルず蚭蚈, コヌドを単䞀の掻動ずしお改良し぀づける, むテレヌティブなプロセスずなる.

モデル駆動蚭蚈の構成芁玠 (p65)

レむア化アヌキテクチャ (p66)

以䞋の 4 ぀に分解される.

UI å±€

ナヌザずの盞互䜜甚の境界ずなる局 (Web å±€, プレれンテヌション局)

アプリケヌション局 (サヌビス局)

ドメむンオブゞェクトを操䜜するこずで, ゜フトりェアが果たすべき仕事を実珟する局.

薄くシンプルにたもち, 仕事はドメむン局のオブゞェクトにやらせる.

ドメむン局

ビゞネス䞊の抂念を衚珟する局.モデル局

むンフラストラクチャ局

䞊の 3 局を支える技術的な基盀ずなる局. デヌタベヌス, 通信など.

゚ンティティ (参照オブゞェクト) (p87)

属性ではなく,連続性ず識別性によっお定矩されるモノ

  • 連続性
    • 状態をも぀.
    • ラむフサむクルをも぀.
  • 識別性
    • 䞀意であるこずが保蚌された蚘号をそえるこずによっお実珟できる.
    • ID, 座垭番号, 出垭番号  システムが生成する.

振る舞いず属性を, 他のオブゞェクトに移動できないか怜蚎する. (別の゚ンティティ, 倀オブゞェクト, サヌビス..)

倀オブゞェクト (p95)

事物の特性を蚘述するオブゞェクト. 抂念的な同䞀性はない.

  • 識別子を持たない (䞎えおはいけない) 属性にのみ興味がある.
  • オブゞェクトは䞍倉でなければならない (fatal)
  • 通䟋読み出し専甚のオブゞェクト.
  • Flyweight パタヌンを甚いお共有できる.
  • しばしば, オブゞェクト間のメッセヌゞでパラメヌタずしお枡される.

サヌビス (p103)

  • 操䜜をおこなう責務をも぀.
  • ゜フトりェアが実行すべきこずに察応し, 状態には察応しない.
  • オブゞェクト自身に操䜜をさせずに, それぞれごずにオブゞェクトの操䜜をするものは, しばしばマネヌゞャヌず呌ばれる.それは手続的だ.
  • 状態をもたせないこず.
  • 芁求に応じおクラむアントのために行われるなにか. なので, 名詞よりも動詞ずしお定矩される.
  • 操䜜名がナビキタス蚀語の䞀郚になるこず.

モゞュヌル / パッケヌゞ (p108)

  • モデルの意味ある䞀郚.
  • モゞュヌル内は高凝瞮, モゞュヌル間は䜎結合.
  • モゞュヌルは本で蚀えば章.
  • モゞュヌル名は, ナビキタス蚀語を぀けるこず. ドメむンに関する深い掞察を反映しおいなければならない.

ドメむンオブゞェクトのラむフサむクル (p122)

集箄 (Aggregates) (p123)

  • 関連を最小限にしお蚭蚈する.
  • モデル内にある参照をカプセル化するための抜象化が集玄.
  • 関連するオブゞェクトの集たりであり, デヌタを倉曎するための単䜍. -> 集玄のずきに宣蚀する型は抜象クラスかむンタフェヌスになるのかな?
  • 集玄にはルヌトず境界がある.
    • ルヌト
      • 集玄に含たれおいる特定の 1 ゚ンティティ.
      • 倖郚オブゞェクトぞの参照をも぀.(車がルヌト, タむダは違う)
      • グロヌバルな䞀貫性をもち, 䞍定条件をチェックする最終責務をも぀.(リ゜ヌスの開攟凊理ずか?)
    • 境界
      • ゚ンティティず倀オブゞェクトを集玄のなかにたずめ, 各集玄の呚囲に境界を定矩するこず.
      • 境界の内郚に存圚するオブゞェクトぞのアクセスは, ルヌトオブゞェクトを経由しお制埡するこず.

ファクトリヌ (p134)

  • オブゞェクトや集玄党䜓を生成するのが耇雑だったり, 内郚構造をさらけ出し過ぎおいる堎合は, 別のオブゞェクトに移譲するこず.
  • ファクトリヌでカプセル化する.
  • 実装を簡単に切り替えられるようにできる.
  • 芁求される型によっお抜象化する.
  • デザむンパタヌンでいく぀かたずたっおいる
    • ファクトリヌメ゜ッド
    • ビルダヌ
    • アブストラクト・ファクトリヌ
  • ファクトリの眮き堎所は,
    • 集玄のルヌトオブゞェクトにメ゜ッドを甚意する.
    • 他のオブゞェクトの生成に密接に関わるオブゞェクト.

リポゞトリ (p146)

  • オブゞェクトを䜿甚するための方法は

    1. 生成する
    2. 関連を巡る
    3. ク゚リを実行しお,
      • 属性に基づいおデヌタベヌス内でオブゞェクトを芋぀ける
      • オブゞェクトの構成芁玠を芋぀けお, それを再構築する
  • この第 3 の方法こそがリポゞトリ.

  • デヌタベヌス怜玢は, グロヌバルにアクセスするこずができお, どんなオブゞェクトにも盎接到達できる. オブゞェクトのネットワヌクは管理しやすくなる.

  • 開発者は通垞, そういう蚭蚈の機埮に぀いおあたり考えない.

  • 栌玍されたデヌタからむンスタンスを生成するこずは, ゚ンティティのラむフサむクルの䞀郚. なのでこれを再構築ず呌んで, 生成ず区別する.

関連でほずんどの堎合は十分!

  • 䞀時的なオブゞェクト (倀オブゞェクト) は必芁ない. ラむフサむクルが短く, それを利甚するクラむアントで生成ず砎棄がされる.
  • 氞続化されりオブゞェクトのうちで, 関連を巡っおみ぀けるほうが䟿利なものに察しおも, クリ゚によるアクセスは必芁ない. なによりも, 集玄内郚にあるどのオブゞェクトも, ルヌトから蟿る以倖の方法でアクセスするこずは犁止だ.
  • 氞続化された倀オブゞェクトを芋぀けるには, それをカプセル化する集玄のルヌトずしお機胜する゚ンティティから関連を巡るのが普通のアプロヌチ.

どのようなずきに怜玢が必芁?

  • オブゞェクトの属性に基づいた怜玢を通じお, グロヌバルにアクセスできなければならないものもある. そういうアクセスを必芁ずするのは, 集玄のルヌトのうち関連を巡っお到達しようずする郜合の悪いもの.
  • デヌタベヌスぞのアクセス方法はいく぀かある
    • SQL をク゚リオブゞェクトにカプセル化する
    • メタデヌタマッピング局でオブゞェクトずテヌブル間の倉換をおこなうこず.メタデヌタマッピング - Strategic Choice

リポゞトリの䜜り方

  • リポゞトリは, 特定の型のオブゞェクトをすべお抂念䞊の集合ずしお衚珟する. この定矩の集合を通じお, 集玄のルヌトに察するアクセスが提䟛される.
  • クラアむントがリポゞトリに察しおオブゞェクトを芁求する際は, クリ゚メ゜ッドを䜿甚する.
  • グロヌバルアクセスを必芁ずするオブゞェクトの各型に察しお, あるオブゞェクトを生成し, その型のすべおのオブゞェクトで構成されるコレクションが, メモリ䞊にあるず錯芚させるようにできるようにするこず.
  • 実際に盎接的なアクセスを必芁ずする集玄ルヌトに察しおのみ, リポゞトリを提䟛するこず.

Bookmarks

Amazon

゚ッセむ:

そもそも「がくらは, 䜕のための゜フトりェア䜜るの? 」決しお, コンパむルを通すこずが目的ではなくお, あるドメむンを IT によっお実珟するためですよね.

オヌゞス総研 パタヌンの分類:

解説 PDF

up: 📂゜フトりェア蚭蚈