Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
В вашем примере, похоже, аналитик не настоящий. То есть ничего не знающий о предметной области.
Между тем, архитектурные уровни где требуется высокочастотность ( банкоматы — сильно устаревший пример, сегодня абсолютно для всех операций, где вовлечен человек, возможно постороение строгого ACID ), например, HFT — могут быть сделаны асинхронными и не-ACID. В то время как ядро остается надежным как банковский сейф с его двусторонней записью и general ledger.
транзакции — т.е. перемещение средств или активов между счетами внутри системы.
Избежать ситуации можно в том случае, если осмыслить процесс реализации функционала не как изменения состояния счетов, но как транзакции — т.е. перемещение средств или активов между счетами внутри системы. При этом в качественной реализации такой архитектуры сама возможность изменения значения без произведения двусторонней транзакции должна быть исключена — ядро предоставляет api, на основе которого реализуется высокоуровневая логика функционала продукта. При этом полностью берет на себя все, что связано непосредственно с изменениями значений.
Handle.GET("/transfer?f={?}&t={?}&x={?}", (int fromId, int toId, int amount) => {
Db.Transaction(() => {
Account source = Db.SQL<Account>("SELECT a FROM Account a WHERE AccountId = ?", fromId).First;
Account target = Db.SQL<Account>("SELECT a FROM Account a WHERE AccountId = ?", toId).First;
if (source.Balance < amount) {
statusDescription = "Insufficient funds on source account.";
statusCode = 400;
} else {
source.Balance -= amount;
target.Balance += amount;
statusDescription = "Transfer OK.";
statusCode = 200;
}
})
return new Response() {
StatusDescription = statusDescription,
StatusCode = statusCode
};
});
При этом в качественной реализации такой архитектуры сама возможность изменения значения без произведения двусторонней транзакции должна быть исключена — ядро предоставляет api, на основе которого реализуется высокоуровневая логика функционала продукта. При этом полностью берет на себя все, что связано непосредственно с изменениями значений.
Переведите деньги на кредитный счёт, они списываются с дебитового сразу, а на кредитный попадают только на следующий день.
Кроме того, если ошибка одного программиста может привести к краху и банкротству финансового учреждения — как тогда вы будете измерять вклад IT?
Почему компании не умеют обращаться с деньгами