Nach dem Prinzip der Trennung von Befehlen und Abfragen sowie dem Denken in Daten und DDD mit Clojure- Präsentationen sollten Nebenwirkungen (die die Welt verändern) von Berechnungen und Entscheidungen getrennt werden, damit beide Teile leichter zu verstehen und zu testen sind.
Dies lässt eine unbeantwortete Frage offen: Wo sollten wir relativ zur Grenze "die Welt fragen" setzen? Einerseits ist das Anfordern von Daten von externen Systemen (wie Datenbanken, APIs von Extental Services usw.) nicht referenziell transparent und sollte daher nicht mit reinem Rechen- und Entscheidungscode zusammenpassen. Auf der anderen Seite ist es problematisch oder unmöglich, sie vom rechnerischen Teil zu trennen und als Argument zu übergeben, da wir möglicherweise nicht im Voraus wissen, welche Daten wir möglicherweise anfordern müssen.
Antworten:
Dies ist ein Fall, in dem, wie in den Kommentaren erwähnt, die Übergabe der Fähigkeit zum Abrufen von Daten (z. B. erstklassige Funktion, ein Objekt, das eine Schnittstelle implementiert usw.) einen bequemen Mechanismus zum Isolieren von Nebenwirkungen bietet.
Eine Funktion höherer Ordnung, deren Körper rein ist, hat eine nicht festgelegte Reinheit: http://books.google.com/books?id=Yb8azEfnDYgC&pg=PA143#v=onepage&q&f=false
Ich habe darüber geschrieben und diese Art von Funktion als potenziell reine Funktion bezeichnet: http://adamjonrichardson.com/2014/01/13/potential-pure-functions/
Wenn Sie eine potenziell reine Funktion mit Fall-Through-Funktionen kombinieren (denen Verzweigungskonstrukte fehlen und die so wenig wie möglich tun), eine Kombination, die ich Isolationssätze nenne, können Sie Nebenwirkungen sehr effektiv isolieren und sehr testbaren Code erstellen: http: // adamjonrichardson.com/2014/01/15/isolating-side-effects-using-isolation-sets/
quelle
Sie speichern das Ergebnis in der Klasse, dies scheint zunächst etwas seltsam, führt jedoch zu einfacherem Code. zB keine temporären Variablen im Aufrufer.
quelle