最近、ddd とモデル層の概念を理解するのにとても忙しくしています。大量の記事、例、Q & A を読み、それに何時間も費やしました。それでも、いくつかの原則が正しいかどうかはわかりません。
それらの 1 つは、次の質問に対する答えです。ドメイン オブジェクトには、どの程度のビジネス ロジックが存在する必要がありますか? 一部のソースでは、ドメイン オブジェクトはビジネス ロジック全体にアタッチする必要があると言われていますが、一方、ドメイン オブジェクトは可能な限り小さくし、その値のみを表す必要があると想定する記事に出くわしました。それは私を本当に混乱させます。
私の理解では、ドメイン オブジェクトは、ドメイン内のエンティティを表すクラスです。
たとえば、Invoice エンティティを使用してみましょう。各請求書は、その項目で構成されています。請求書の値を計算するには、すべてのアイテムの値を合計する必要があります (これは非常に単純な例です。現実の世界では、税金を追加したり、支払った値を計算したりする場合があります)。
class Invoice
{
public $id;
public $items = [];
public $status;
const STATUS_PAID = 'paid';
const STATUS_NOT_PAID = 'not_paid';
public function isPaid()
{
return $this->status == self::STATUS_PAID;
}
public function getInvoiceValue()
{
$sum = 0;
foreach($this->items as $item) {
$sum += $item->value;
}
return $sum;
}
}
私の理解では、メソッド isPaid() は適切な場所にあります。独自のデータを参照します。しかし、getInvoiceValue() についてはよくわかりません。ここでは、他のドメイン オブジェクトを操作します。
データを表すためだけにドメイン オブジェクトを使用し、より高度なタスクを実行するにはいくつかのデコレータを使用する必要があるのではないでしょうか?
前もって感謝します。