为了账号安全,请及时绑定邮箱和手机立即绑定

根据日期时间值更改实体状态

根据日期时间值更改实体状态

PHP
隔江千里 2021-12-03 16:06:31
我有一个Subscription具有status和canceledAt字段的实体。我想status从 更改active为canceled何时canceledAt已过期。所以,我想象在Subscription::getStatus方法中检查 cancelledAt :// Subscription.phppublic function getStatus(){     // .... check canceledAt     return $this->status;}但这也需要更改持久层的状态。我应该对事件做些什么吗?
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

最后,我创建了一个应用程序服务来获取订阅的状态,以便在需要时将其存储在数据库中。

此外,我getStatusSubscription实体中删除了该方法。


查看完整回答
反对 回复 2021-12-03
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

我不会坚持任何状态。只是取消的日期时间。为什么?因为状态取决于当前日期时间。您现在可以保留一个状态值,但该值可能是错误的,例如下一分钟。然后,从下一分钟及以后,您将有一个错误的值持续存在。

在我看来,持久化一个随时间变化的值是没有意义的,因为持久化的含义正好相反,就是存储一个本身不会改变的值。

我会在请求时计算状态,具体取决于当前日期时间和取消时间,但我不会坚持下去。由于它取决于当前日期时间,因此您应该将当前日期时间视为输入值,就像@VoiceOfUnreason 在他的回答中所说的那样。


查看完整回答
反对 回复 2021-12-03
?
富国沪深

TA贡献1790条经验 获得超9个赞

如果您不将时间视为输入值,请在考虑之前考虑它——这是一个重要概念——John Carmack,1998


对于简单查询,处理此问题的直接方法是将当前时间作为输入传递


// Subscription.php


public function getStatus(currentTime)

{

    // .... check canceledAt

    if (currentTime > canceledAt) {

        // ....

    }


    return $this->status;

}

另一方面,如果您试图做的是影响状态的权威更改,那么您可以在命令中将当前时间传递给域模型。


public function onTick(currentTime) {

    // ....

}

在某些情况下,通过时钟的域服务表示而不是值来表示时间可能是有意义的。重要的一点是应用程序,而不是域模型,负责“现在几点了?”


查看完整回答
反对 回复 2021-12-03
  • 3 回答
  • 0 关注
  • 211 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信