Aufbau einer robusten asynchronen/nicht-asynchronen API
Die Entwicklung wiederverwendbarer Bibliotheken, die Netzwerk-E/A verarbeiten, erfordert häufig die Bereitstellung sowohl asynchroner (asynchroner) als auch synchroner (nicht asynchroner) Methoden. Es ist ineffizient, einfach Wait()
zu verwenden, um aus einer asynchronen Version eine synchrone Version zu erstellen. In diesem Artikel wird eine Lösung zur Beibehaltung beider Optionen unter Wahrung der API-Designintegrität vorgestellt.
Async priorisieren: Der beste Ansatz
Für eine optimale Wartbarkeit sollten Sie erwägen, Ihre API ausschließlich mit asynchronen Methoden zu entwerfen. Dadurch wird Codeduplizierung vermieden und die Konsistenz gefördert. Implementieren Sie diese asynchronen Methoden mit nicht blockierenden Vorgängen, um unnötige Thread-Pool-Nutzung zu vermeiden und die Leistung sicherzustellen.
Navigation im Async/Non-Async-Kompromiss
Die Bereitstellung sowohl asynchroner als auch nicht asynchroner Methoden stellt eine erhebliche Wartungsherausforderung dar. Das Duplizieren von Code ist unerwünscht, und das einfache Umschließen eines Methodentyps in den anderen (wie von Stephen Toub besprochen) ist keine ideale Lösung.
Der „Boolesche Argument-Hack“: Eine pragmatische Lösung
Eine praktische Technik zur Vermeidung von Codeduplizierungen ist der „Boolesche Argument-Hack“. Dazu gehört das Hinzufügen eines booleschen Parameters zu Ihrer Methode, der angibt, ob synchrones oder asynchrones Verhalten gewünscht ist. Die interne Logik der Methode behandelt dann beide Szenarien.
Dieser Ansatz erhöht zwar die Komplexität, reduziert jedoch den Wartungsaufwand im Vergleich zur Verwaltung separater Implementierungen erheblich. Die Eignung dieses Hacks hängt vom spezifischen Kontext und der Balance zwischen Wartbarkeit und API-Design-Eleganz ab.
Das obige ist der detaillierte Inhalt vonWie kann ich eine gut gepflegte API mit asynchronen und nicht asynchronen Optionen entwerfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!