Auch wenn Software nicht rostet und kein Putz abbröckeln kann, so unterliegt sie doch in der Regel dauernden Änderungen und Anpassungen und kann dadurch zum Sanierungsfall werden. Sei es, dass Funktionalitäten der Software ergänzt, geändert oder gestrichen werden oder dass sich einfach das Umfeld von benutzten Komponenten oder das Betriebssystem ändert. Gerne wird aus Zeitgründen auf dabei erforderliche Refactorings verzichtet, und mit der Zeit wird es immer schwieriger, Änderungen umzusetzen oder die Software zu warten und alte Fehler zu beheben, ohne dabei neue zu produzieren. RAD-Systeme wie Delphi verleiten zudem dazu, Konzepte wie die Schichtentrennung außen vor zu lassen und Businesscode bunt gemischt mit GUI-Code in verschiedenste Ereignis-Handler zu verstreuen. Das Ergebnis ist ein System, dessen Abhängigkeiten Tests extrem erschweren oder gar unmöglich machen und dessen Reaktion auf Änderungen nur schlecht abgeschätzt werden kann.
Es gibt nicht das eine Rezept, um im Handumdrehen aus jedem System, das durch Änderungen aus dem Ruder gelaufen ist oder noch nie testbar war, eine testbare und damit wartbare Anwendung zu machen. Aber es gibt sehr wohl hilfreiche Prinzipien, die bei Refactorings beachtet werden sollten, und es gibt Rezepte und Vorgehensmuster, wie Sie Code Schritt für Schritt testbar machen, die unterschiedlichsten Abhängigkeiten auflösen und Klassen entkoppeln können.
Der Workshop beginnt mit einem Überblick über die Grundlagen, die SOLID-Prinzipien, Unit-Tests, Patterns und Antipatterns, insbesondere für die Entkopplung von Schichten und die klassischen Refactorings von M. Fowler. An einer kleinen RAD-Beispielanwendung wird dann im Laufe des Workshops gezeigt, wie Refactorings eingesetzt werden, um den Code sukzessive testbar zu machen. In Demos und Übungen werden Wege und Methoden erarbeitet, um Code durch Anwendung von OOP-Konzepten und Designpatterns zu strukturieren. Es werden verschiedene Wege gezeigt, Abhängigkeiten zwischen Klassen oder von globalen Variablen aufzuheben oder temporär zu kapseln und testbar zu machen. So können mit den Praxistipps und Rezepten aus dem Workshop letztendlich auch Änderungen an Legacy-Systemen so vorgenommen werden, dass diese Erweiterungen testbar sind.
Sicherer Umgang mit Delphi und Kenntnisse objektorientierter Entwicklung
Zum direkten Nachvollziehen der Beispiele und für Übungen wird ein Laptop mit einer Delphi-Version zwischen mindestens Delphi XE5 und der aktuellen Delphi-Version sowie dem MMX-Code-Explorer-Plug-in empfohlen.
Aktuelle Rechner bieten Hyperthreading und Multicore-CPUs oder gleich mehrere Prozessoren. Programme mit mehreren Threads können diese Hardware besser ausnutzen. Daneben erwarten User ebenso wie die Richtlinien aktueller Betriebssysteme ein „Responsive UI“, unabhängig davon, was die Anwendung tut. Lange Datenbankabfragen oder die Nutzung von Cloud-Diensten im Hintergrund dürfen eine Anwendung nicht mehr blockieren. Mit Threads und dem zusätzlichen Parallel-Programming-Library-(PPL-)Framework bietet Delphi einiges an Bordmitteln, um das zu realisieren.
Allerdings erhöhen Threads und Tasks auch die Komplexität von Programmen und bieten bei falscher Verwendung genügend Fallstricke, die für Deadlocks oder Abstürze sorgen können.
Der Workshop gibt eine Einführung in die Verwendung der Thread-Klassen von Delphi und das Design von Threads. Sie lernen die verschiedenen Synchronisationselemente wie Critical Sections, Mutexes, Events und Semaphoren ebenso kennen wie Delphis Hilfsklassen von TMonitor bis TThreadedQueue<T>. Sie lernen die Tasks, Futures und den Threadpool der PPL kennen. Wir stellen Tasks und Threads gegenüber und schauen uns an, wie beide effektiv verwendet werden, um ein reaktives UI mit Threads und/oder Tasks realisieren zu können. Ein Blick auf das das Exception Handling bei Threads und Tasks und asynchronen Aufrufe in TComponent runden die Themen ab.
Zum direkten Nachvollziehen der Beispiele und für Übungen wird ein Laptop mit einer Delphi-Version zwischen mindestens Delphi XE7 und der aktuellen Delphi-Version empfohlen. Für einige Beispiele ist eine höhere Delphi-Version erforderlich (APL ab Delphi XE8). Als Betriebssystem kann Windows 7/8 oder 10 verwendet werden.
This workshop will give an introduction to mobile programming using Delphi’s cross-platform framework FireMonkey (FMX). We will start with an introduction to the FireMonkey framework itself. We’ll take a look at the different kinds of system and application architecture for mobile applications that you can use. This will include a few multi-tier development hints. We’ll also talk about remote data access via REST APIs or database on board solutions. Next, we’ll take a look at some UI topics in FMX like common components, customizable lists, different FMX styles, and various strategies to achieve a responsive UI. We also will discuss how to successfully utilized TFrameStand for modularity, visual continuity, and animations. Finally, we will take a look at OS interactions with a specific focus on Android. We’ll see how to use sensors and devices like the camera, location, and more. You will get some hints on how to use Android Intents and other low level interaction, too.
We will primarily use Android as a target in this workshop. We recommend bringing a laptop with Delphi Seattle or higher to directly follow the examples and for exercises.