ドメインモデル貧血症とは

どんな状態か

一見、それが本物のドメインモデルに見えるという点です。オブジェクトがいくつかあり、それらはドメイン空間にある名詞から名前をつけられています。それから、オブジェクト同士がしっかりとしたリレーションで結びついており、本物のドメインモデルと同じような構造を持っているのです。

ただし、オブジェクトの振る舞いを見れば違いが分かります。それらのオブジェクトにはわずかな振る舞いしかない、ということに気づくと思います。 ドメインのロジックをドメインオブジェクトの中に入れないという設計ルールに従っているのでしょう。その代わり、すべてのドメインロジックを含むサービスオブジェクト群が存在しているのです。 こういったサービスはドメインモデルの上位に居座り、データのためだけにドメインモデルを使うのです。

Martin Fowler's Bliki in Japanese - ドメインモデル貧血症

例えばドラゴンクエストを作る事を考えよう。ドラクエには、「勇者」がいて、「魔物」がいて、「魔法」があって、「武器」があって、「道具」がある。ドメインモデルとは、これらをクラス化したもの。

マイ勇者 = new 勇者("ああああ");
マイ勇者.equip(new Weapon("はがねのつるぎ"));
printf(マイ勇者.攻撃力());

みたいな感じ。

ドメインモデル貧血症とは

マイ勇者.attack(ドラキーA)

みたいな呼び出しができず、

BattleManager.attack(マイ勇者, ドラキーA, StrongnessCalculator.getCurrentAttackPower(マイ勇者.getStatus("ちから"), ItemManager.getAttackPower("はがねのつるぎ")));

みたいなしょうもない呼び出しをしないといけない状態のこと。

detail.chiebukuro.yahoo.co.jp