'因此,在此上下文中,我们创建了一个Order.adjust()
方法,将调用委托给OrderAdjust Service
。
让Order.adjust()
具有使Order
拥有调整操作的优势。'
这是怎么做到的?域服务是否已注入?
$order = new Order();
$order->adjust(???);
域服务在无状态时如何对域实体进行操作? 如果将域服务注入实体,则只能在引用上调用方法,因此状态必须存在?
$service = DomainService();
$entity = DomainEntity();
$entity->operation($service);
// Inside DomainEntity
public function operation(DomainService &$service)
{
// Operations are delegated to the domain service reference
$service->operation();
$service->operation2();
}
$another_entity = AnotherDomainEntity();
// What happened in the first object must be known here
// otherwise what's the point?
$another_entity->operation($service);
不应该像这样或在应用程序服务中完成吗?
$domain_service = new DomainService();
$entity = new DomainEntity();
$another_entity = new AnotherDomainEntity();
$domain_service->performOperation($entity, $another_entity);
域实体/对象之间的操作如何完成? 域对象一般如何通信?他们在哪里实例化?
非常感谢代码示例。
来源: http://stochastyk.blogspot.no/2008/05/domain-services-in-domain-driven-design.html
答案 0 :(得分:1)
问题与此类似:https://softwareengineering.stackexchange.com/a/62193/19252。
您引用的博客文章在您的问题上做得很好。简而言之:如果可以在模型中完成(并进行单元测试!),请在那里进行。域服务相当于例外而不是规则。
让我引用那篇文章:
“ - Are'nt服务不好,我们不应该按照OO使用所有对象吗?
是的,服务倾向于与面向对象设计正交。 [...]建模领域有一种巨大的趋势,即使用过多的服务“
至于我,这种趋势来自于.NET / Java持久性架构的缺陷,就像将业务逻辑放入setter方法一样不可能。