Php 实体上的缓存';的属性和对getter上第三方的依赖关系
我有一个实现问题,我没有找到最好的解决方案 我有一个简单的实体:Php 实体上的缓存';的属性和对getter上第三方的依赖关系,php,caching,dependencies,entity,domain-driven-design,Php,Caching,Dependencies,Entity,Domain Driven Design,我有一个实现问题,我没有找到最好的解决方案 我有一个简单的实体: <?php class Game { // array private $statistics; // Datetime private $ended; ... public function isEnded() { return new Datetime >= $this->ended; } public func
<?php
class Game
{
// array
private $statistics;
// Datetime
private $ended;
...
public function isEnded()
{
return new Datetime >= $this->ended;
}
public function getStatistics($service)
{
if ($this->isEnded()) {
return $this->statistics;
}
// The third party service will compute fresh statistics
// and refresh the Game's property
$service->computeStatistics($this);
return $this->statistics;
}
}
如果统计数据的计算仅依赖于游戏对象本身的数据,只需在游戏中移动ComputeTestatics
方法即可
如果computeStatistics
也使用其他地方的数据,则使用双重分派模式:
这几乎是你已经在做的,你有一个域服务来做计算,我唯一不同的是做$service->computeTestistics($This)代码>无副作用,如下所示:
$statistics = $service->computeStatistics($this);
这样,您的实体就不依赖于实现,而是依赖于一个抽象,也就是说,它需要一个具有方法computeTestatics
的服务,该方法接受一个游戏并返回一个统计数据。这个域服务是您的域模型的一部分,就像游戏一样。所以,游戏取决于您的域模型,这很好。域模型可以依赖于域模型