Pod wpływem postu @Koziołek nasunęło mi się pytanie jak od strony kodu działa w banku wykonanie przelewu? W książkach jest to właśnie taki uproszczony przykład - zakładamy transakcję, odejmujemy od jednego, dodajemy do drugiego i w zależności od powodzenia commitujemy lub robimy rollback. A jak to wyglada w realnym swiecie? Móglby ktoś (może @Koziołek) jakos szerzej to opisać i wrzucić jakieś przykładowe kody jakby to mogło być realizowane?
jeśli jest to przelew wewnętrzny to tak to mniej więcej wygląda (+ sprawdzanie czy są środki dostępne), przy przelewach zewnętrznych w grę wchodzą zewnętrzne serwisy jak ELIXIR
@goodfather: to zależy od banku. W najprostszym modelu masz mniej więcej taki proces:
Po stronie obciążenia:
- Zlecenie przelewu przez uprawnionego użytkownika/automat (np. przelewy stałe, polecenia zapłaty itp.)
- Sprawdzenie, czy na koncie jest wystarczająca ilość środków i:
- nie ma środków, to odrzucamy zadanie albo,
- nie ma środków, to zakładamy blokadę i generujemy ostrzeżenie dla klienta albo,
- są środki, to zakładamy blokadę.
- Wygenerowanie dokumentu przelewu
- przesłanie dokumentu do systemu rozliczeniowego i księgowego.
- „obciążeniowe” zdjęcie blokady (zdjęcie blokady powoduje obciążenie rachunku).
Po stronie uznania:
- Pojawia się polecenie uznania rachunku,
- sprawdzenie, czy rachunek może być uznany (istnieje, czy są blokady itp.) → możliwe odrzucenie, co wiąże się z wygenerowaniem storno dla strony obciążonej.
- wygenerowanie zdarzenia księgowego → uznanie konta.
- uznanie na rachunku.
Po stronie banku w obu przypadkach potrzebne są odpowiednie operacje księgowe zgodnie z zasadą podwójnego zapisu. I tu właśnie leży „realna magia” operacji na kontach bankowych. Każda taka operacja przechodzi przez księgę rachunkową banku, gdzie pozostaje po niej ślad. Co ciekawe w księdze tej nie ma rachunków klientów, a konta księgowe, które odpowiadają „kierunkom” ruchu pieniądza. W ten sposób bank wie, ile pieniędzy przyjął i ile wysłał w świat (tzw. konta drogi). Ile było operacji przewalutowania (konta w walucie obcej) albo ile wpłacono/wypłacono w okienku (konta materiałowe).
Do tego dochodzi rekoncyliacja, czyli wzajemne sprawdzenie zapisów pomiędzy kontami księgowymi, ale też np. pomiędzy bankiem, KIR-em i NBP (tak jak ma to miejsce w ELIXIRze).
Jeżeli do czegoś miałbym to porównać, to najbliżej jest do event sourcingu. Przy czym ES jest to taki dość prymitywny mechanizm.