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