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
的服务,该方法接受一个游戏并返回一个统计数据。这个域服务是您的域模型的一部分,就像游戏一样。所以,游戏取决于您的域模型,这很好。域模型可以依赖于域模型