При передаче конфликтов параллелизма на уровень вашего приложения, есть ли альтернатива использованию исключений, которые также соблюдают принцип Разделение команд-запросов , или являются исключениями лучшим механизмом, который у нас есть (в языках, которые поддерживают исключения )
В недрах моего приложения у меня есть оптимистическая логика блокировки, которая выполняет несколько уровней вниз, когда я вызываю определенные высокоуровневые методы, например, (в моем случае я использую пользовательский слой доступа к данным, хотя я определенно открыт для того, чтобы узнать, как это делают реализации ORM). Вызовы методов высокого уровня, с которыми взаимодействует приложение, выглядят так:
// 'data' is just a placeholder for multiple parameters, including something
// that contains row version information
void Customer.UpdateInformation(object data);
Мне нужно иметь возможность сообщать пользователям веб-приложений, когда кто-то еще обновил данные, над которыми они работают.
Я бы предпочел не возвращать значение из методов, которые изменяют данные. Поэтому в прошлом я генерировал исключения (аналогично API адаптера данных .NET, который выдает DBConcurrencyException при обнаружении конфликтов), но конфликты параллелизма не являются, в некотором смысле здравого смысла, исключительными , Это факт жизни: предсказуемая, ожидаемая часть рабочего процесса приложения. Они квалифицируются как экзогенные исключения в таксономии Эрика Липперта?