Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   RetryPolicy - Eine Klasse für robuste Programmierung (https://www.delphipraxis.net/203226-retrypolicy-eine-klasse-fuer-robuste-programmierung.html)

generic 26. Jan 2020 19:48

RetryPolicy - Eine Klasse für robuste Programmierung
 
In Rahmen der CodingBott Youtube Videos, ist eine kleine Klasse entstanden, welche ich euch hier vorstellen möchte.

Etwas inspiriert wurde ich durch Polly ein C# Framework (https://github.com/App-vNext/Polly).

Die Klasse hilft euch Dinge erneut zu tun, wenn eine Exception aufgetreten ist.
Beispiele findet ihr in der README bzw. es gibt natürlich Unit-Tests, wo ihr auch reinschauen könnt, wie die Klasse funktioniert.

Grundsätzlich geht es um eine robuste Programmierung. D.h. Ihr ruft einen Webservice an, doch dieser reagiert nicht und es gibt eine Exception.
Mit der Klassen, könnt ihr einfach das 2,3 mal probieren den Service aufzurufen mit z.B. 2 Sekunden zwischen den aufrufen.

Der Quelltext ist hier verfügbar:
https://github.com/codingbott/Bott.RetryPolicy

Bitte gebt mir mal Feedback, ob ihr das brauchen könnt und ob noch weitere Features notwendig sind. Falls Ihr weitere Ideen habt, sind diese natürlich auch willkommen.

Beispiel:

4 mal den Webservice versuchen. Der zweite Versuch 1 Sekunde später. Der dritte 3 Sekunden nach dem zweiten und dann 10 Sekunden für den letzten Versuch.
Klappt der auch nicht wird false zurück gegeben.
Delphi-Quellcode:
if
    TRetryPolicyFactory.GetInstance()
      .WaitAndRetry(1000) // 1 Sekunde
      .WaitAndRetry(3000) // 3 Sekunden
      .WaitAndRetry(10000) // 10 Sekunden
      .Execute(
          procedure()
          begin
            // webservice aufruf hier
          end
      )
then
  // erfolg
else
  // fehlgeschlagen
Man kann auch auf die Exceptions reagieren, durch einen Callback.

ConstantGardener 26. Jan 2020 21:17

AW: RetryPolicy - Eine Klasse für robuste Programmierung
 
Das hört sich sehr hilfreich an, teste ich gleich mal aus.

:-D Danke!

TigerLilly 27. Jan 2020 09:35

AW: RetryPolicy - Eine Klasse für robuste Programmierung
 
Ja, das ist cool. Allerdings gibt es das + noch mehr zB auch hier:
https://github.com/exilon/QuickLib

Der schöne Günther 27. Jan 2020 09:44

AW: RetryPolicy - Eine Klasse für robuste Programmierung
 
Oooh, das klingt wirklich interessant.

Grade bei Delphis länglichen anonymen Methoden bin ich weniger ein Freund von Fluent Interfaces, aber wenn ich meinen eigenen Kram gegen etwas austauschen kann gegen etwas das evtl. noch andere verwenden schlafe ich auch gleich viel besser.

Vielen Dank. 👍

generic 28. Jan 2020 10:24

AW: RetryPolicy - Eine Klasse für robuste Programmierung
 
Zitat:

Zitat von TigerLilly (Beitrag 1456049)
Ja, das ist cool. Allerdings gibt es das + noch mehr zB auch hier:
https://github.com/exilon/QuickLib

Oh schön. Falls ihr nicht so wie ich suchen wollt, die Klasse heißt dort TFaultControl und nicht wie in der Readme steht FailControl.

Da sind auch paar andere interessante Klassen bei. Allerdings muss ich auch ein Minuspunkt geben, keine Unit-Tests!

generic 6. Feb 2020 13:12

AW: RetryPolicy - Eine Klasse für robuste Programmierung
 
Auf dem CodingBott Youtube Kanal gibt es jetzt ein Video zu dieser Klasse.

Ich quatsche einfach 20 Minuten zum Entwicklungsprozess.
D.h. es ist dieses mal also nicht spannend. Die Techniken sind bereits in anderen Video behandelt.

Punkte sind:
* die Klasse ist test-getrieben entstanden, da es kein Programm gab, welches die Klasse nutzte. Also der Test zum Starten der verschiedenen Funktionen.
* Zeiger auf Funktionen
* Exception Handling
* FluentInterfaces
* Wo ich mich verrannt habe im Konzept, weil mein Delphi zu alt ist. Dynamische Arrays vs. Listen

Hier ist der Link zum Video:
https://youtu.be/GXx7Ztb5q78


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz