如果有,那么Find-Or-Create的C#成语是什么?伪代码:
private IEntity FindOrCreateEntity(int id, object properties)
{
Entity foundEntity = _db.Find(id);
if (foundEntity == null)
{
foundEntity = _db.Create<Entity>(properties);
}
return foundEntity;
}
我不喜欢以同样的方法找到并创造存在。
答案 0 :(得分:5)
我不喜欢以同样的方法找到并创造存在。
然后不要这样做?
您现在有一个方法可以查找要查找的对象的ID,也可以使用一堆属性来填充新实例。至少可以说这令人困惑。
如果来电者认为该ID应该返回现有记录,但它不再存在怎么办?然后,它会根据它在现有记录上工作的假设而继续生存,而实际上该记录在数据库中还不存在。
让呼叫者遵守这种模式:
var entity = _repository.Find(id);
if (entity == null)
{
entity = _repository.Create();
}
如果有任何问题,您可以为IEntity
的实施提供一个IsNew
属性,该属性返回Id == default(TId)
。