最近我一直忙于理解ddd和模型层的概念。阅读大量的文章,例子,Q和A,花了很多时间在上面。但我还是不确定我是否有正确的原则。
其中之一就是对这个问题的回答:域对象中应该存在多少业务逻辑?一些消息来源说,域对象应该与整个业务逻辑相关联,另一方面,我遇到了一些文章,我认为它应该尽可能小,并且只代表它的值。这让我很困惑。
据我理解,域对象是类,它们表示域中的实体。
例如,让我们使用发票实体。每一张发票都由其项目组成。要计算发票价值,我们必须把所有的项目值加在一起(这是一个非常简单的例子,在现实世界中,会出现加税、计算已付价值等情况)
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()并不确定。我们在这里操作其他域对象。
也许我们应该只使用域对象来表示数据,但是应该使用一些装饰器来执行更高级的任务?
提前谢谢。
https://stackoverflow.com/questions/38695507
复制相似问题