Wie geben Sie dem Leser einen Überblick über eine Reihe von Mustern? Alle Muster in dieser Sprache haben evokative Musternamen. Das Verständnis der Beziehungen zwischen einem Muster und anderen Mustern macht ein Muster verständlicher und nützlicher, da alternative Lösungen bewertet und Folgemuster gefunden und angewendet werden können. Dies ist eines der ersten Python-Designmuster, die ich als Programmierer implementiert habe. Das erinnert mich: Muster sind nicht erfunden, sie werden entdeckt. Sie existieren, wir müssen sie nur finden und nutzen. Ich entdeckte dieses für ein erstaunliches Projekt, das wir vor vielen Jahren implementiert haben: einen speziellen WYSIWYM XML-Editor. Nachdem ich dieses Muster intensiv im Code verwendet habe, lese ich mehr darüber auf einigen Seiten. Zwei Muster zum Erstellen von evokativen Musternamen sind: Noun Phrase Name und Meaningful Metaphor Name. Buffalo Mountain ist ein Beispiel für einen niedlichen, aber stumpfen Namen für ein Muster, an das sich viele Menschen erinnern, aber nur wenige können sich daran erinnern, was es beschreibt. Ein Muster stellt eine Lösung für ein Problem in einem Kontext dar. Wie stellen Sie sicher, dass der Leser die Lösungswahl versteht? Das Delegator-Muster im Code ist genau das gleiche: Klassen höherer Ordnung bitten Klassen niedrigerer Ebene, die Arbeit für sie zu erledigen.
Dies hilft der höherklassigen Klasse, einfacher zu bleiben und weniger über die darunter liegenden Strukturen zu wissen. Dieser Code ruft höchstens 10 Aufgaben der Themen AddressValidation und ShipmentScheduling ab. Die Ergebnisaufgaben werden ausschließlich für die Arbeitskraft mit id externalWorkerId gesperrt. Sperren bedeutet, dass die Aufgabe für diese Arbeitskraft für eine bestimmte Dauer reserviert ist, beginnend mit dem Zeitpunkt des Abrufens, und verhindert, dass eine andere Arbeitskraft dieselbe Aufgabe abrufen kann, während die Sperre gültig ist. Wenn die Sperre abläuft und die Aufgabe nicht abgeschlossen wurde, kann eine andere Arbeitskraft sie so abrufen, dass stillschweigend ausfallende Worker die Ausführung nicht auf unbestimmte Zeit blockieren. Die genaue Dauer ist in den Einzelnenthemen-Abrufanweisungen angegeben: Tasks für AddressValidation werden für 60 Sekunden gesperrt (60L * 1000L Millisekunden), während Aufgaben für ShipmentScheduling für 120 Sekunden gesperrt sind (120L * 1000L Millisekunden). Die Sperrablaufdauer sollte nicht kürzer als die erwartete Ausführungszeit sein. Es sollte auch nicht zu hoch sein, wenn dies eine zu lange Timeout impliziert, bis die Aufgabe wiederholt wird, falls die Arbeitskraft stillschweigend versagt. Die meisten Muster in dieser Sprache begannen als Beobachtungen über “Dinge, die gut funktionierten” in einem bestimmten Muster oder einer bestimmten Sprache, die in einem PLoP-95-Schriftstellerworkshop überprüft wurden.