域模型是否应该强制设置ID?

时间:2017-08-22 04:37:54

标签: model architecture repository-pattern

假设我有一个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)

(这是一个包含更多数据的更复杂模型的简化示例。)

1 个答案:

答案 0 :(得分:0)

它是“最好的”吗?这是一个意见问题,可能你所描述的更正确,有某种“PendingDog”。但我从来没有在实践中看到它。创建新对象类型的复杂性以及所涉及的额外逻辑将使这种成本过高。想想坚持狗。你有一个单独的updateDog(dog)vs insertDog(pendingdog)吗?这会使调用代码变得更加复杂。

我坚持使用可以为空的id,然后让你的updateDog(dog)检查ID是否为null,如果是,则执行插入,如果不是,请执行更新。