C'è un modello standard in OOP per tipo di "atomicamente" aggiornare una coppia di oggetti, come una coppia di conti bancari su una transazione?
Mi piacerebbe avere in qualche modo un singolo metodo pubblico esposto che faccia tutto in una volta, ma può solo venire fuori con modi di farlo facendo due chiamate di metodi pubblici per aggiornare gli oggetti separatamente.
Attualmente sto sperimentando con Racket , ma apprezzerei gli esempi in qualsiasi lingua o una descrizione di un pattern standard.
Ecco un esempio di ciò che ho sperimentato in Ruby (con il quale sono più a mio agio che con Racket ). Non mi interessa il blocco qui, solo con l'interfaccia di classe.
class Account
def initialize(total)
@total = total
end
def total
@total
end
def transfer_to(another, sum:)
change_total_by(-sum)
another.change_total_by(sum)
end
protected
def change_total_by(sum)
@total += sum
end
end
a = Account.new(10)
b = Account.new(20)
a.transfer_to(b, sum: 5)
print "New a.total = #{ a.total },\nnew b.total = #{ b.total }"
Funziona usando protected
invece di private
.