Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   AccessQuery - Massenobjektverarbeitung per Chain-Pattern (https://www.delphipraxis.net/150798-accessquery-massenobjektverarbeitung-per-chain-pattern.html)

WladiD 27. Apr 2010 14:13


AccessQuery - Massenobjektverarbeitung per Chain-Pattern
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ein Hallo an alle Mitglieder,

ich bin ständigen Sprachwechseln ausgesetzt, mal PHP, mal JS und dann wieder Delphi. Bei jedem Wechsel gibt es irgendetwas, was man von einer anderen Sprache vermisst, vor allem wenn man von Delphi zu PHP (OOP ist da mehr ein Witz als Tatsache, auch in PHP 5) wechselt.

Jedenfalls habe ich mich durch die Arbeit an einem Web-Projekt so dermaßen an das JS-Framework jQuery, gewöhnt, dass ich beim letzten Switch zu Delphi nicht vom Gedanken loskommen konnte, eine ähnliche Unit für Delphi umzusetzen. Der Wunsch nach so einem Framework entstand, als die Anforderung bestand, ein paar kleine Positionierungsanimationen von irgendwelchen Komponenten durchzuführen.

So dauerte es nicht lange und aus diesem Bedürfnis (mit den Vorteilen von jQuery im Hinterkopf) entstand das Projekt:

AccessQuery

Wiederkehrende (zeitliche) Verarbeitung von Objekten durch anonyme Methoden, mittels modernster OOP-Entwurfsmuster (Chained-Chain-Pattern, Fluent-Interface, Garbage-Collector) und einem flexiblem Plugin-System auf Generics-Basis. AccessQuery ist prädestiniert für unabhängige und verteilte parametrische Animationen, jedoch ist der genaue Verwendungszweck nicht spezifiziert (rationalisiertes Konzept).

Die TAQ-Klasse (AQ ist die Abkürzung für AccessQuery) greift ein oder beliebig viele Objekte und bietet Methoden, diese mittels anonymer Methoden zu verarbeiten.

Die Verarbeitung kann...
  • sofort (TAQ.Each),
  • wiederholt (TAQ.EachRepeat),
  • zeitversetzt (TAQ.EachDelay),
  • zeitbegrenzt wiederholend (TAQ.EachTimer)
  • oder in unbegrenzten Intervallen wiederholt (TAQ.EachInterval)
...erfolgen.

Konzept

TAQ nutzt moderne objektorientierte Entwurfsmuster und kontextsensitive anonyme Methoden, die es dem Entwickler nicht nur erlauben mit weniger Code mehr zu erreichen, sondern vielmehr, zusammenhängende Code-Fragmente zu vereinen.
  • Die meisten TAQ-Methoden arbeiten nach dem Chain-Pattern
  • Abzweigungen mittels Chained-Chains oder bedingter Chains
  • [NEU] Flexibles Plugin-System für unbegrenzte Erweiterbarkeit
  • Indirekte Instanziierung nach dem Singleton-Pattern
  • Gemanagete TAQ-Instanzen, die durch den integrierten Garbage-Collector automatisch freigegeben werden
  • Unterstützt auch ungemanagete TAQ-Objekte
  • Beliebig viele zeitliche Aktionen über einen TTimer
  • [NEU] TAQPControlAnimations-Plugin für die Animation von Eigenschaften (Position, Hintergrund- und Schriftfarbe) aller TControl-Nachfahren
  • [NEU] TAQPMessages-Plugin für die Bindung beliebig vieler Message-Listener an von TControl abgeleitete Komponenten
Ein Beispiel:
Delphi-Quellcode:
// ...
implementation

uses
   AccessQuery,
   AQPControlAnimations; // Plugin (AQP = AccessQueryPlugin)

procedure TForm1.FormClick(Sender: TObject);
begin
   Take(Sender)
      .FinishAnimations
      .Plugin<TAQPControlAnimations>
      .ShakeAnimation(6, 20, 3, 20, 500);
end;
// ...
AccessQuery-Projektseite auf meiner KiHiWi-Seite (Dokumentation etc.) und Sourceforge (Code-Hosting).

AccessQuery wird unter der MPL 1.1 veröffentlicht: Lizenz.

WladiD 7. Mai 2010 10:57

Beispiel-Nachtrag
 
Liste der Anhänge anzeigen (Anzahl: 1)
Eigentlich habe ich hier die Unit vorgestellt, weil ich etwas Feedback erwartet habe (in welcher Form auch immer), doch es kann auch an dem allgemeinen Titel gelegen haben. Was soll man sich schon unter "Massenobjektverarbeitung..." vorstellen?

Hier nun ein spezifisches Beispiel, welches vielleicht AccessQuery besser abbildet:

1. Erstellt eine neue Form
2. Bindet die AccessQuery-Unit ein (aktuelle Version hier)
3. Definiert die folgende Prozedur für das Click-Event der Form:

Delphi-Quellcode:
implementation

uses
   AccessQuery;

procedure TForm1.FormClick(Sender:TObject);
var
   NewLeft, NewWidth:Integer;
begin
   NewWidth:=Screen.WorkAreaWidth div 2;
   if Left <> 0 then
      NewLeft:=0
   else
      NewLeft:=Screen.WorkAreaWidth - NewWidth;

   TAQ.Take(Sender)
      .FinishAnimations
      .BoundsAnimation(NewLeft, 0, NewWidth, Screen.WorkAreaHeight, 500,
         TAQ.Ease(etMassiveQuadratic));
end;
Beim Klick auf die Form wird diese abwechselnd die linke oder die rechte Bidschirmhälfte animiert einnehmen. Das kompilierte Beispiel ist im Anhang.

Mittlerweile habe ich eine Dokumentation (TAQ-Klasse) auf meiner KiHiWi-Seite.

hoika 7. Mai 2010 11:16

Re: AccessQuery - Massenobjektverarbeitung per Chain-Pattern
 
Hallo,

vielleicht liegt es daran, dass keiner weiss,
wozu das gut sein soll ;)



Heiko

rapante 7. Mai 2010 11:56

Re: AccessQuery - Massenobjektverarbeitung per Chain-Pattern
 
Einfach mal die Beispiele anschauen, dann fällt einem schon was ein...

Also ich find's cool :thumb:

dominikkv 7. Mai 2010 12:57

Re: AccessQuery - Massenobjektverarbeitung per Chain-Pattern
 
Wow tolle Arbeit! Wenn ich jetzt noch ein Projekt hätte, in dem ich das benutzen könnte... :zwinker:

DeddyH 7. Mai 2010 13:26

Re: AccessQuery - Massenobjektverarbeitung per Chain-Pattern
 
Schönes Ding, aber leider unter Delphi 2007 nicht zu kompilieren wegen der anonymen Methoden :(

WladiD 7. Mai 2010 13:29

Re: AccessQuery - Massenobjektverarbeitung per Chain-Pattern
 
Ein jeder Mensch trachtet nach Beachtung und Anerkennung. Bei den Programmierern ist dieses Bedürfnis ^2 (wenn nicht gar höher).

Danke!

Wenn jemand von euch AccessQuery verwendet und nicht weiter kommt, fragt hier.

WladiD 7. Mai 2010 13:35

Re: AccessQuery - Massenobjektverarbeitung per Chain-Pattern
 
Zitat:

Zitat von DeddyH
Schönes Ding, aber leider unter Delphi 2007 nicht zu kompilieren wegen der anonymen Methoden :(

Oh, das ist wirklich schade. Ich wusste nicht, ab welcher Version Delphi die anonymen Methoden unterstützt (die Hilfe erwähnt es nicht). Doch die sind ein Bestandteil des Konzepts.

Naja, jetzt weiss ich wenigstens, dass es unter 2007 nicht läuft. Wie sieht es mit 2009 aus? Konnte es jemand da kompilieren?

Bebe 7. Mai 2010 15:45

Re: AccessQuery - Massenobjektverarbeitung per Chain-Pattern
 
Läßt sich einwandfrei mit D2009 kompilieren.

Gruß
Matze

shmia 7. Mai 2010 16:30

Re: AccessQuery - Massenobjektverarbeitung per Chain-Pattern
 
Aha.
Es handelt sich hier um eine Implementierung eines sogenannten Fluent Interface.
Das erste Mal, dass ich so etwas für Delphi sehe.
Delphi hat (leider) keine eingebaute Garbage Collection weshalb diese neue Technik sich hier kaum verbreitet.
Mal kucken wie das hier gemacht wird... :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr.
Seite 1 von 2  1 2      

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