Embedded GUI Best Practices der toolgestützten Entwicklung

Tipps zur Implementierung I

Plattformunabhängigkeit – Das GUI-Tool sollte auf einer Zwischenschicht aufsetzen. Diese abstrahiert die Schnittstellen zur Hardware, zum verwendeten Betriebssystem, zur benötigten Auflösung und zum gewählten Farbformat sowie zum eigentlichen grafischen Subsystem. So lässt sich die Hardware einfach austauschen, indem nur die Abstraktionsschicht auf die neue Plattform portiert wird.

Trennung von Middleware und GUI – Eine klare Trennung der Geschäftslogik von der graphischen Benutzerschnittstelle hilft, die Fachlichkeiten besser zu strukturieren. Dadurch ist es zum einen möglich, parallele Entwicklungen zu betreiben. Zum anderen können durch geeignete APIs mehrere, unterschiedliche GUIs auf dieselbe Instanz der Geschäftslogik (Middleware) zugreifen. Dies wird zum Beispiel bei der Implementierung von sog. Companion-Screens interessant. Hier wird zur eigentlichen, stationären Bedieneinheit eine weitere, mobile Anzeige hinzugefügt.

Nutzen von bekannten Best-Practices: OOP mit MVC und MVVM – Da in der Regel GUI-Projekte durchaus schnell komplex werden können, ist es empfehlenswert, ein objektorientiertes Programmierparadigma zu wählen:
durch Kapselung, Wiederverwendbarkeit von Code und Vererbungen lässt sich ein GUI-Projekt in einzelne Teile zerlegen. Damit wird das Projekt beherrschbar. Des Weiteren können gängige Entwicklungsmuster - wie das Model-View-Controller- oder das Model-View-ViewModel-Muster - helfen, eine klare Projektstruktur zu schaffen. Demzufolge sollte auch das verwendete GUI-Tool solche Entwurfsmuster von sich aus unterstützen.

Asynchrone statt synchrone APIs verwenden - Sobald das GUI mit der Middleware verknüpft wird, passiert es oft, dass nach Benutzereingaben Animationen nicht mehr flüssig dargestellt werden oder sogar stocken und keine weiteren Eingaben mehr möglich sind. Dies liegt häufig an der synchronen Kopplung der Benutzereingaben mit der Verarbeitung innerhalb der Middleware: das GUI wartet, bis die Middleware die Eingabe verarbeitet hat und kann deshalb keine weiteren Aktionen mehr durchführen - es blockiert. Zur Vermeidung sollten alle rechenintensiven Aufrufe der Middleware asynchron, also ohne aktives Warten der GUI, ausgeführt werden. Die Ergebnisse des Aufrufs werden dann zu einem späteren Zeitpunkt dem GUI wieder zurückgeführt. Dies ist vor allem bei Animationen im GUI unumgänglich.

User Experience – Für eine optimierte User Experience, eine Kombination aus ansprechendem Design und guter Bedienbarkeit, bedarf es eine Menge gedanklicher Vorarbeit: Damit die einzelnen Ansichten leicht zu erfassen sind und die touchbaren Elemente groß genug sein können, müssen die Funktionen der Benutzeroberfläche auf mehrere Ansichten aufgeteilt werden.

Diese Aufteilung richtet sich nach Anwendungszenarien und logischer Zusammengehörigkeit der Funktionen. Jeder Screen muss übersichtlich und in sich logisch gegliedert sein. Die einzelnen Elemente müssen dann gemäß ihrer Priorität gewichtet werden. Dies geschieht durch Größe, Farbe und Form. Des Weiteren muss das GUI in sich konsistent sein: Die an einer Stelle im GUI gelernte Bedienung muss sich unbedingt an allen anderen ähnlichen Stellen gleich verhalten. Dafür muss das GUI-Konzept in Komponenten bzw. Templates strukturiert werden. Letzteres ist eine wichtige Vorarbeit für die objektorientierte Programmierung. Letztlich bedarf es eines gestalterischen Gespürs und Erfahrung um aus einer Kombination aus Farben, Linien, Symbolen und Schriften ein harmonisches und attraktives Ganzes werden zu lassen. Für diesen Bereich gibt es Spezialisten, die entsprechende Methoden für Anforderungserhebung, Konzeption und Design parat haben.