Здравствуйте, scf, Вы писали:
scf>Вы за какой вариант и почему?
Если смотреть на реальные бизнес сценарии, то могу припомнить только 2:
— работает сервсис которому падать нельзя. Ему нужно перезаписать объект и его не волнует что было до этого. Если АПИ предлагает только стандартные CRUD методы, то выходит такое:
var newObj = new {};
try{
var obj = api.Read();
api.Update(newObj);
}
catch(NotFoundException)
{
api.Create(newObj);
}
— есть ГУИ и пользователь хочет создать/поменять объект. Но если кто-то еще уже сделал изменения когда он несколько минут вводил свои изменения и нажал потом "Сейв" — то показать алерт и спросить — перезаписать или отклонить свои изменения.
Для того чтобы удовлетворить все потребности мы у себя исполуем такое:
class API
{
//Create or update
ObjectVersion Save(object obj);
//when expectedVersion = 0 - Create if and only if obj is not exist
//when expectedVersion > 0 - Update with concurrency check
ObjectVersion Save(object obj, int expectedVersion);
}