public HaushaltsbuchEinzeln Zahlung(Transaktion transaktion) { Locker locker = new Locker(); bool isLocked = true; do { locker.Check_for_locked( () => { isLocked = false; locker.Lock_starten(); }, () => { isLocked = true; locker.Warten(); } ); } while (isLocked); TransaktionenRepository transaktionenRepository = new TransaktionenRepository(); KassenbestandRepository kassenbestandRepository = new KassenbestandRepository(); HaushaltsbuchRechner rechner = new HaushaltsbuchRechner(); decimal kassenbestand = kassenbestandRepository.Lade(); Transaktionstyp_pruefen(transaktion.Typ, onEinzahlung: () => { kassenbestand = rechner.Kassenbestand_verringern(kassenbestand, transaktion.Wert); }, onAuszahlung: () => { kassenbestand = rechner.Kassenbestand_erhoehen(kassenbestand, transaktion.Wert); } ); transaktionenRepository.Speichern(transaktion); kassenbestandRepository.Speichern(kassenbestand); locker.Lock_beenden(); var transaktionen = transaktionenRepository.Transaktionen_laden_by_Datum_and_Kategorie(transaktion.Datum, transaktion.Kategorie); var gesamtbetrag = rechner.Kategorie_Gesamtbetrag_berechnen(transaktionen); Kategorie kategorie = new Kategorie(transaktion.Kategorie, gesamtbetrag); HaushaltsbuchEinzeln dtoModel = new HaushaltsbuchEinzeln(kassenbestand, kategorie, transaktion.Typ); return(dtoModel); }