Re[3]: UOW изменение количественного свойства
От: VAD_OS  
Дата: 08.06.17 14:53
Оценка:
Здравствуйте, itslave, Вы писали:

I>Здравствуйте, Sinix, Вы писали:


S>>Вариант 3: декремент через optimistic change tracking с обработкой неудачных попыток обновления.



I>Тут у чувака непонимание как обрабатывать конкурентное изменение данных, ты слишком глубоко копаешь

I>ИМХА только третий вариант поможет, остальные только усугубят

У меня не понятки как это сделать красиво с точки зрения архитектуры.

метод типа такого я могу написать

public void ChangeQuantity(int delta)
{
using(TransactionScope scope = new TransactionScope())
{
try{
//получаем текущее значение
// отнимаем дельту
// сохраняем то что получилось
scope.Complete()
}
catch(Exception){
scope.RollBack();
}
}
}

Мне нужен пример слабосвязанного кода, приведу пример.

например метод бизнес логики:

public class OrderProcessor: IOrderProcessor
{

......

public void ProcessOrder(int count)
{
//получаем продукт
....
product.NewQuantity = product.Quantity — count;
productRepository.Update(product);
}
}

public class Product{
.....
public int Quantity{get;set;}
public int NewQuantity{get;set;}
.......
}


//логика БД

DefaultProductREpository:IRepository<Product>
{
.....
public void Update(Product prod){
//открываем транзакцию
......
//получаем строку из таблицы, где хранится информация о количестве
var storageInfo = dbEntities.ProdStorageInfo.First(..... некое условие);
storInfo.Quantity = storInfo.Quantity — (product.Quantity — product.NewQuantity)

//работаем с другими данными для продукта которые хранятся в других таблицах

//сохраняем изменения закрываем транзакцию
....
}
....
}



Но такое решение наверное не очень красивое хотя бы потому,
что появляется дополнительное свойство у доменного объекта Product.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.