假设我有一个Dog域模型:
class Dog {
int id;
string name;
string phone;
}
我想知道存储库在我们知道其名称和电话时创建一个新的Dog
:
$dog = new Dog('Fido', '555-555 5555');
Dog $createdDog = $repository->insert($dog);
最好强制Dog::id
不可为空(因此insert()
接受没有id
属性的简化模型吗?
或者更灵活的方法是什么,允许id
为null,并让存储库在存储后设置对象的id
值?
将id
置为可空的问题是,其他地方的代码始终必须确保id
不为空,例如updateDog($dog)
。
(这是一个包含更多数据的更复杂模型的简化示例。)
答案 0 :(得分:0)
它是“最好的”吗?这是一个意见问题,可能你所描述的更正确,有某种“PendingDog”。但我从来没有在实践中看到它。创建新对象类型的复杂性以及所涉及的额外逻辑将使这种成本过高。想想坚持狗。你有一个单独的updateDog(dog)vs insertDog(pendingdog)吗?这会使调用代码变得更加复杂。
我坚持使用可以为空的id,然后让你的updateDog(dog)检查ID是否为null,如果是,则执行插入,如果不是,请执行更新。