如何使用域驱动设计表示命中数

时间:2014-04-24 08:45:08

标签: php domain-driven-design

假设上下文是Job Portal网站。

我的要求是这样的:

  

当求职者看到空缺时,空缺的观点数是   递增

我如何在网络中表示这一点?

据我所知,这取决于请求空缺的控制器,可能是这样的:

class VacancyController {
    public function viewVacancy($vacancyId) {
        $vacancy = $this->repo->find($vacancyId);

        $vacancy->incrementView();

        $this->repo->persist($vacancy);

        return $vacancy;
    }
}

有没有办法在域层中表示这样的规则?

1 个答案:

答案 0 :(得分:2)

同步更新视图计数不是一个好主意,尤其是在使用RDBMS数据库时。

update vacancy_view set 
    count = count + 1
where vacancy_id = $id

如果很多用户在短时间内看到相同的空缺,行可能会被阻止。

我建议改用“插入”。插入可以是同步的或异步的,取决于基准。但是这个实现细节可能隐藏在applicationEvents抽象背后。视图计数可以在请求或缓存时进行总结,在此用例中,通常可以容忍最终的一致性。

class VacancyController {
    public function viewVacancy($vacancyId) {
        $vacancy = $this->repo->find($vacancyId);

        $this->applicationEvents->raise(VacancyViewedEvent($vacancyId))

        return $vacancy;
    }
}

据说一些nosql数据库(如Cassandra)非常适合视图计数场景,但我还没有相关经验。