我有一个 PHP MVC 应用程序,我的“M”有一个服务层、映射器层和域层。我应该在哪里以及如何检查以确保对象具有所有必需的属性?
在我看来,这些职责不属于映射器或服务层,因此离开了领域层本身。checkRequired()
我在我的基础域类中放置了一个方法。它根据属性数组检查对象的属性$_required
,如果缺少任何属性,则会引发错误。
从数据库中检索对象时,我一直在调用checkRequired()
对象构造函数中的最后一个命令。如果对象是新实体(即未从数据库中检索),我提供一些默认值(在构造函数中),然后调用checkRequired()
.
虽然这一直工作正常,但我现在开始在我的(有点贫血的)域对象上放置一些行为方法,但我遇到了麻烦。例如,一个用户可以拥有许多宠物,所以在我的用户模型上我放了一个addPet()
方法。我知道我需要传入 Pet 对象,因为最好注入依赖项,因此我真正的方法签名是User::addPet(ConcretePet)
.
但这就是问题所在!如果没有用户(作为它们的所有者),我的宠物就无法存在,所以我无法实例化ConcretePet
!我可以让宠物上的用户可选,但这将是一个倒退。我可以移动checkRequired()
其他地方的内容,但在哪里?
解决这种常见问题的典型方法是什么?