最近一直忙于理解 ddd 和 Model 层的概念。阅读大量文章、示例、Q 和 A,花了很多时间在上面。我仍然不确定我是否掌握了一些正确的原则。
其中之一是对以下问题的回答:Domain Objects 中应该存在多少业务逻辑?一些消息来源说域对象应该与整个业务逻辑相关联,另一方面,我遇到了一些文章,我认为它应该尽可能小,并且只代表它的值。这让我真的很困惑。
在我的理解中,域对象是类,代表域中的实体。
因此,例如,使用 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()。我们在这里对其他域对象进行操作。
也许我们应该只使用域对象来表示数据,但使用一些装饰器来执行更高级的任务?
提前致谢。