Montag, 2. Januar 2017

Ein frohes 2017!

Und schon wieder ist ein Jahr rum. Klingt komisch, is aber so...

Als ich heute eine kleine Änderung im FDK gemacht habe, habe ich "selbstverständlich" auch im Changelog die Änderung notiert und musste feststellen, der 1. Eintrag war schon im Jahr 2015...

2015 habe ich damit schon begonnen? Kaum zu glauben... Wie viel Entwicklungszeit schon in den Units steckt.

Natürlich habe ich nicht 15 Monate kontinuierlich daran gearbeitet, sondern immer dann, wenn ich eine neue Routine gebraucht habe diese - in einer allgemeinen Version - ins FDK aufgenommen. Sehr viel Zeit ist aber auch in Änderungen und Verbesserungen geflossen.

Ein kleines Fazit - nur für mich:

Das FDK zu entwickeln war die beste Entscheidung die ich seit langem getroffen habe. Jede Stunde die in die Entwicklung geflossen ist, habe ich schon mehr als doppelt bei meinen eigenen Projekten gespart...

Mein Ziel war es.
  1. Wiederverwendbaren Code zu produzieren.
  2. Mit Dependency Injektion und Factorys, meine Units unabhängige von einander zu erzeugen.
  3. Wrapper zu verwenden, die einem die Verwendung von XY erleichtern.
  4. Projekte im MVVM - Style zu programmieren.
  5. Plattform unabhängig zu programmieren.
  6. Threadsave zu programmieren.
  7. Zeit zu sparen.
Alle diese Punkte werden erfüllt.

Ein Beispiel aus einem aktuellen Projekt (Die Unit ist nicht mal 500 Lines lang)

Uses
  System.Classes,
  System.SysUtils,
  System.Rtti,
  System.Generics.Defaults,
  System.Generics.Collections,
  REST.JSON,
  Delphiprofi.FDK.AnyFactory,
  Delphiprofi.FDK.FMXHelpers,
  Delphiprofi.FDK.Streams,
  Delphiprofi.FDK.Enumerables,
  Delphiprofi.FDK.Compressing.Zlib,
  Delphiprofi.FDK.REST,
  Delphiprofi.FDK.JSON,
  Delphiprofi.FDK.Utils,
  Delphiprofi.FDK.Helpers,
  Delphiprofi.FDK.Types,
  Delphiprofi.FDK.FluidCreator,

  Delphiprofi.FDK.FireDac,
  Delphiprofi.FDK.LocalWebModul,
  Delphiprofi.FDK.Messages,
  Delphiprofi.FDK.TreeviewHandler

  MyInterfaces;

Macht aber den kompletten IO zwischen lokaler Datenbank, dem REST Server und der Applikation. Hierfür habe ich KEINE EINZIGE Komponente auf ein Form geklickt.

Abgesehen von wenigen Ausnahmen, habe ich im gesamten Projekt kein einziges Konstrukt wie:

Foo := TFoo.Create;
try
  try
    // Whatever
  except
    On E : Exception
      begin
         // Whatever
      end;
  end;
finally
  FreeAndNIL(Foo);
end;

Da es zur Zeit noch kein ARC für Windows gibt, nutze ich konsequent Interfaces und Ref-Counted Objecte... Somit läuft der Code immer gleicht, egal ob mobile oder Windows/OSX Version.

Es bleibt spannend...