Der Java-Profi: Persistenzlösungen und REST-Services (eBook)

Datenaustauschformate, Datenbankentwicklung und verteilte Anwendungen
eBook Download: PDF | EPUB
2016 | 1. Auflage
404 Seiten
dpunkt (Verlag)
978-3-86491-961-9 (ISBN)

Lese- und Medienproben

Der Java-Profi: Persistenzlösungen und REST-Services -  Michael Inden
Systemvoraussetzungen
Systemvoraussetzungen
36,90 inkl. MwSt
  • Download sofort lieferbar
  • Zahlungsarten anzeigen
Wenn Sie bereits komplexe Java-Applikationen für den Desktop-Bereich schreiben, können Sie sich an Unternehmensanwendungen als weitere Herausforderung wagen. Dabei kommen Sie früher oder später mit Datenbanken, den Datenformaten XML oder JSON und auch mit verteilten Applikationen in Berührung. Das notwendige Wissen für einen effizienten Einstieg erlangen Sie in diesem Buch. Michael Inden macht Sie zunächst mit den Grundlagen der professionellen Erstellung von Unternehmensanwendungen vertraut und vermittelt Ihnen substanzielle Kenntnisse zum Informationsaustausch basierend auf XML oder JSON. Darüber hinaus bietet er eine fundierte Einführung in die Persistenz mit relationalen Datenbanken mithilfe von SQL, JDBC und JPA. Schließlich thematisiert der Autor die Datenverarbeitung mit den immer populärer werdenden NoSQL-Datenbanken anhand von MongoDB. Im Praxisalltag kommt oftmals der Wunsch auf, Funktionalität auch im Netzwerk bereitzustellen. Hierfür existieren vielfältige Technologien. Das Buch fokussiert auf die populären 'RESTful Webservices' und zeigt Ihnen exemplarisch die Entwicklung von einfachen Client-Server-Applikationen mithilfe von JAX-RS.

Dipl.-Inform. Michael Inden ist Oracle-zertifizierter Java-Entwickler für JDK 6. Nach seinem Studium in Oldenburg war er lange Zeit als Softwareentwickler und -architekt bei verschiedenen internationalen Firmen tätig. Dabei hat er über 15 Jahre Erfahrung beim Entwurf objektorientierter Softwaresysteme gesammelt, an diversen Fortbildungen und an mehreren Java-One-Konferenzen in San Francisco teilgenommen. Sein besonderes Interesse gilt dem Design qualitativ hochwertiger Applikationen mit ergonomischen, grafischen Oberflächen sowie dem Coaching von Kollegen.

Dipl.-Inform. Michael Inden ist Oracle-zertifizierter Java-Entwickler für JDK 6. Nach seinem Studium in Oldenburg war er lange Zeit als Softwareentwickler und -architekt bei verschiedenen internationalen Firmen tätig. Dabei hat er über 15 Jahre Erfahrung beim Entwurf objektorientierter Softwaresysteme gesammelt, an diversen Fortbildungen und an mehreren Java-One-Konferenzen in San Francisco teilgenommen. Sein besonderes Interesse gilt dem Design qualitativ hochwertiger Applikationen mit ergonomischen, grafischen Oberflächen sowie dem Coaching von Kollegen.

Inhaltsverzeichnis 5
Vorwort 9
Motivation 9
Wer sollte dieses Buch lesen? 10
Was soll mithilfe dieses Buchs gelernt werden? 10
Sourcecode und ausführbare Programme 11
Aufbau dieses Buchs 12
Konventionen 13
Danksagung 15
Anregungen und Kritik 16
1 Einstieg in XML und JSON 17
1.1 Basiswissen XML 18
1.1.1 Bestandteile und Aufbau eines XML-Dokuments 21
1.1.2 Validierung eines XML-Dokuments 26
1.2 XML-Verarbeitung mit JAXP 30
1.2.1 Einfaches Parsing mit SAX 31
1.2.2 Komplexere Parsing-Aufgaben mit SAX 34
1.2.3 Parsing mit DOM 37
1.2.4 Verarbeiten und Speichern mit DOM 41
1.2.5 StAX als Alternative zu SAX oder DOM? 45
1.2.6 SAX, StAX oder DOM? 52
1.2.7 XPath im Überblick 53
1.2.8 XSLT im Überblick 58
1.2.9 XMLEncoder und XMLDecoder im Überblick 62
1.3 XML-Verarbeitung mit JAXB 65
1.3.1 Schritt 1: Passende Java-Klassen erstellen 66
1.3.2 Schritt 2: Marshalling und Unmarshalling 70
1.3.3 JAXB: Stärken und Schwächen 74
1.4 JAXB und StAX in Kombination 75
1.4.1 Rekonstruktion von Objekten mit JAXB und StAX 75
1.4.2 Vergleich zu SAX, DOM und JAXB 78
1.4.3 On-the-Fly-Modifikation von Objekten 81
1.5 JSON – das bessere XML? 83
1.5.1 Crashkurs JSON 83
1.5.2 JSON mit Java verarbeiten 84
1.5.3 JSON vs. XML 89
1.6 Weiterführende Literatur 90
2 Einführung in Persistenz und relationale Datenbanken 91
2.1 Grundlagen zur Persistenz 92
2.1.1 Beschränkungen einfacher Persistenzlösungen 92
2.1.2 Modelle zur Persistierung von Objekten 94
2.1.3 Speicherung von Daten in relationalen Datenbanken 95
2.2 Abbildung zwischen Objekt- und Datenbankmodell 102
2.2.1 Abbildung von Referenzen 104
2.2.2 Abbildung von Assoziationen und Aggregationen 107
2.2.3 Abbildung von Vererbung 110
2.3 Das Datenbanksystem HSQLDB im Kurzüberblick 114
2.4 SQL-Grundlagen 116
2.4.1 DDL – Definition von Tabellen 117
2.4.2 DQL – Datenabfrage 123
2.4.3 DML – Datenmanipulation 127
2.5 Ausfallsicherheit und Replikation 130
2.6 Weiterführende Literatur 131
3 Persistenz mit JDBC 133
3.1 Datenbankzugriffe per JDBC 133
3.1.1 Schritte zur Abfrage von Datenbanken 136
3.1.2 Besonderheiten von ResultSet 144
3.1.3 Abfrage von Metadaten 150
3.1.4 Probleme bei der Ausführung von Statements 158
3.1.5 Das Interface PreparedStatement 161
3.1.6 Transaktionen in JDBC 164
3.2 Grundlagen zum ORM mit JDBC 167
3.2.1 Rekonstruktion von Objekten 167
3.2.2 Zugriffe mit einem Data Access Object (DAO) 172
3.3 Weiterführende Literatur 175
4 Persistenz mit JPA 177
4.1 Grundlagen zum ORM und zum JPA 178
4.2 Einführung in JPA an einem Beispiel 180
4.2.1 Definition persistenter Klassen 180
4.2.2 Die Konfigurationsdatei persistence.xml 183
4.2.3 Datenbankzugriffe per JPA in Java SE 184
4.2.4 Lebenszyklus von Entitäten (Entity Lifecycle) 189
4.2.5 Datenbankmodell 191
4.2.6 Vorteile der konfigurativen Persistenz 193
4.3 JPQL im Überblick 194
4.3.1 Syntax von JPQL 194
4.3.2 Besondere Arten von Queries 197
4.3.3 Abfragen mit JPQL ausführen 198
4.3.4 Typsichere Abfragen und das Criteria API 204
4.4 DAO-Funktionalität mit JPA 207
4.4.1 CRUD-Funktionalität 207
4.4.2 Einsatz des DAO 210
4.5 Fortgeschritteneres ORM mit JPA 212
4.5.1 Abbildung von Assoziationen 213
4.5.2 Abbildung von Vererbungshierarchien 216
4.5.3 Verarbeitung der Typen aus JSR-310: Date and Time 220
4.5.4 Bean Validation im Einsatz 223
4.6 Transaktionen und Locking 227
4.6.1 Isolationslevel und Effekte 227
4.6.2 Problemkontext 228
4.6.3 Optimistic Locking 229
4.7 Caching in JPA 232
4.8 Fazit 234
4.9 Weiterführende Literatur 234
5 NoSQL-Datenbanken am Beispiel von MongoDB 235
5.1 Einführung und Überblick 235
5.2 Einführung MongoDB 241
5.2.1 Analogie von CRUD (RDBMS) zu IFUR (MongoDB) 243
5.2.2 Komplexere Abfragen 248
5.2.3 MongoDB und Transaktionen 251
5.3 Ausfallsicherheit und Skalierbarkeit 252
5.3.1 Hintergrundwissen: Formen der Skalierung 252
5.3.2 Ausfallsicherheit und Replica Sets 254
5.3.3 Skalierung und Sharding 255
5.3.4 Anmerkungen zu Replica Sets und Sharding 257
5.4 MongoDB aus Java ansprechen 257
5.4.1 Einführendes Beispiel 258
5.4.2 Daten einfügen und auslesen 259
5.4.3 Verarbeitung komplexerer Daten 263
5.4.4 Einfaches JSON-basiertes Object/Document Mapping 268
5.4.5 Object/Document Mapping mit Spring Data MongoDB 271
5.5 Fazit 283
5.6 Weiterführende Literatur 284
6 REST-Services mit JAX-RS und Jersey 285
6.1 REST im Kurzüberblick 286
6.1.1 Einführendes Beispiel eines REST-Service 288
6.1.2 Zugriffe auf REST-Services 292
6.1.3 Unterstützung verschiedener Formate 294
6.1.4 Zugriffe auf REST-Services am Beispiel von MongoDB 296
6.2 Ein REST-Service mit CRUD-Funktionalität 299
6.2.1 MIME-Types und unterschiedliche Datenformate 299
6.2.2 HTTP-Kommandos und CRUD-Funktionalität 301
6.3 Tipps zum Design von REST-Interfaces 306
6.3.1 Varianten der Rückgabe und Error Handling bei REST 306
6.3.2 Wertübergabe als @QueryParam oder @PathParam 309
6.3.3 Paging bei GET 310
6.4 Fortgeschrittene Themen 311
6.4.1 Einsatz von Request- und Response-Filtern 311
6.4.2 Security im Kontext von REST 315
6.4.3 Testen mit restfuse 318
6.5 Fazit 320
6.6 Weiterführende Literatur 321
7 Entwurf einer Beispielapplikation 323
7.1 Iteration 0: Ausgangsbasis 323
7.2 Iteration 1: Zentrale Verwaltung von Highscores 327
7.3 Iteration 2: Verwaltung von XML 332
7.4 Iteration 3: Bereitstellen als REST-Service 338
7.5 Iteration 4: Web-GUI mit HTML und JavaScript 344
7.6 Iteration 5: Protokollierung von Aktionen mit MongoDB 352
7.7 Fazit zum Abschluss der Iterationen 357
A Einführung Gradle 361
A.1 Projektstruktur für Maven und Gradle 361
A.2 Builds mit Gradle 363
B Client-Server-Kommunikation und HTTP im Überblick 371
B.1 Client-Server-Kommunikation 371
B.2 Basiswissen HTTP 373
C Grundlagenwissen HTML 379
C.1 Basiswissen HTML 379
C.1.1 HTML am Beispiel 380
C.1.2 Interaktivität und Formulare 382
D Wissenswertes zu JavaScript 387
D.1 Grundlagen zur Sprache 387
D.2 Modifikation von HTML 389
D.3 JSON-Verarbeitung 393
D.4 REST-Services ansprechen 394
Literaturverzeichnis 395
Index 397
www.dpunkt.de 0

Vorwort


Zunächst einmal bedanke ich mich bei Ihnen, dass Sie sich für dieses Buch entschieden haben. Hierin finden Sie Informationen zu den Datenaustauschformaten XML und JSON sowie zum Zugriff auf Datenbanken mit JDBC und JPA als auch auf MongoDB. Darüber hinaus werden RESTful Webservices mit JAX-RS und Jersey behandelt. Diese für Unternehmensanwendungen wichtigen Themen möchte ich Ihnen anhand von praxisnahen Beispielen näherbringen. Dabei kommen die vielfältigen Neuerungen aus JDK 8 zum Einsatz, um die Beispiele prägnanter zu machen. Für einen fundierten Einstieg in Java 8 möchte ich Sie auf meine Bücher »Java 8 – Die Neuerungen« [9] oder alternativ »Der Weg zum Java-Profi« [8] verweisen. Beide können ergänzend, aber auch unabhängig von diesem Buch gelesen werden.

Motivation


Wenn Sie bereits komplexe Java-Applikationen für den Desktop-Bereich schreiben und sich vertraut mit der Sprache Java fühlen, dann sind Sie schon recht gut für das Berufsleben gerüstet. Allerdings kommen Sie dort früher oder später mit Datenbanken, dem Informationsaustausch basierend auf XML oder JSON und vermutlich auch verteilten Applikationen in Berührung. Darunter versteht man Programme, die auf mehreren JVMs (und gewöhnlich somit auf mehreren Rechnern) ausgeführt werden. Um zusammenzuarbeiten, müssen diese miteinander kommunizieren, wodurch ganz neue Herausforderungen, aber auch Möglichkeiten entstehen.

Vielleicht haben Sie sich bisher auf den Desktop-Bereich konzentriert und wollen nun per JDBC oder JPA mit einer Datenbank kommunizieren. Dann erhalten Sie in diesem Buch eine fundierte Einführung in die Persistenz mit Java, SQL, JDBC und JPA. Oftmals benötigen Sie aber weiteres Know-how, da die Programmanwender zunehmend anspruchsvoller werden: Neben einer gut bedienbaren Benutzeroberfläche kommt für viele Applikationen der Wunsch auf, deren Funktionalität – zumindest teilweise – auch im Netzwerk bereitzustellen. Dazu existieren vielfältige Technologien. In diesem Buch wollen wir uns auf die populären RESTful Webservices konzentrieren und mit der Programmierung einer sogenannten Client-Server-Applikation beschäftigen.

Wie Sie sehen, sind Unternehmensanwendungen ein spannendes, aber auch weitreichendes Feld, was deutlich mehr Anforderungen als reine Java-SE-Anwendungen an den Entwickler stellt. Dieses Buch gibt Ihnen einen fundierten Einstieg. Wie schon bei meinem Buch »Der Weg zum Java-Profi« war es auch diesmal mein Ziel, ein Buch zu schreiben, wie ich es mir selbst immer als Hilfe gewünscht habe, um mich auf die Herausforderungen und Aufgaben im Berufsleben vorzubereiten.

Wer sollte dieses Buch lesen?


Dieses Buch ist kein Buch für Programmierneulinge, sondern richtet sich an all diejenigen Leser, die solides Java-Know-how besitzen und ihren Horizont auf die interessante Welt der Unternehmensanwendungen erweitern wollen. Dazu werden die dafür benötigten Themen Datenaustauschformate (XML, JSON) sowie Datenbankentwicklung (RDBMS, SQL, JDBC, JPA und auch NoSQL-DBs mit MongoDB) sowie die Kommunikation in verteilten Applikationen mit REST-Webservices (JAX-RS) vorgestellt.

Dieses Buch richtet sich im Speziellen an zwei Zielgruppen:

  1. Zum einen sind dies engagierte Hobbyprogrammierer, Informatikstudenten und Berufseinsteiger, die Java als Sprache beherrschen und nun neugierig auf die zuvor genannten Themen sind.

  2. Zum anderen ist das Buch für erfahrene Softwareentwickler und -architekten gedacht, die ihr Wissen ergänzen oder auffrischen wollen.

Was soll mithilfe dieses Buchs gelernt werden?


Dieses Buch zeigt und erklärt einige wesentliche Themen, die bei der Realisierung von Unternehmensapplikationen von Bedeutung sind. Sollte ein Thema bei Ihnen besonderes Interesse wecken und Sie weitere Informationen wünschen, so finden sich in den meisten Kapiteln Hinweise auf weiterführende Literatur.

Zwar ist Literaturstudium hilfreich, aber nur durch Übung und Einsatz in der Praxis können wir unsere Fähigkeiten signifikant verbessern. Deshalb ermuntere ich Sie, die gezeigten Beispiele (zumindest teilweise) durchzuarbeiten. Manchmal werde ich bei der Lösung eines Problems bewusst zunächst einen Irrweg einschlagen, um anhand der anschließend vorgestellten Korrektur die Vorteile deutlicher herauszustellen. Mit dieser Darstellungsweise hoffe ich, Ihnen mögliche Fallstricke und Lösungen aufzeigen zu können.

Des Weiteren lege ich Wert darauf, auch den kleinen, scheinbar nicht ganz so wichtigen Dingen ausreichend Beachtung zu schenken. Zum Beispiel ist es von großem Nutzen, wenn Klassen, Methoden, Attribute usw. einen sinnvollen Namen tragen.

Auch auf der Ebene des Designs lässt sich einiges falsch machen. Die Komplexität in der zu modellierenden Fachlichkeit dient häufig als Ausrede für konfuse und verwirrende Lösungen. Beim professionellen Entwickeln sollte man aber viel Wert auf klares Design legen. Grundsätzlich sollte alles möglichst einfach und vor allem gut verständlich gehalten werden, sodass eine ausgereifte und wartbare Lösung entsteht.

Sourcecode und ausführbare Programme


Da der Fokus des Buchs auf dem praktischen Nutzen und der Vorbereitung auf das Berufsleben bzw. dessen besserer Meisterung liegt, werden praxisnahe Beispiele vorgestellt. Um den Rahmen des Buchs nicht zu sprengen, stellen die Listings häufig nur Ausschnitte aus lauffähigen Programmen dar – zum besseren Verständnis sind wichtige Passagen dort mitunter fett hervorgehoben. Die in den Listings abgebildeten Sourcecode-Fragmente stehen als kompilierbare und lauffähige Programme (Gradle-Tasks) auf der Webseite zu diesem Buch www.dpunkt.de/java-persistenz zum Download bereit. Der Programmname bzw. der Name des ausführbaren Gradle-Tasks wird in Kapitälchenschrift, etwa FIRSTSAXEXAMPLE, angegeben.

Neben dem Sourcecode befindet sich auf der Webseite ein Eclipse-Projekt, über das sich alle Programme ausführen lassen. Idealerweise nutzen Sie dazu Eclipse 4.5 oder neuer, weil diese Version der IDE bereits Java 8 unterstützt und die Beispiele dieses Buchs immer wieder auch Funktionalitäten aus JDK 8 nutzen.

Neben dem Eclipse-Projekt wird eine Datei build.gradle mitgeliefert, die den Ablauf des Builds für Gradle beschreibt. Dieses Build-Tool besitzt viele Vorzüge wie die kompakte und gut lesbare Notation und vereinfacht die Verwaltung von Abhängigkeiten enorm. Gradle wird im Anhang A einführend beschrieben. Als Grundlage für spätere Ergänzungen dient folgende Datei build.gradle, die JUnit als Abhängigkeit definiert und trotz der Kürze schon ein vollständiges Release als jar-Datei namens java-profi-db-rest.jar erzeugt:

apply plugin: 'java'
apply plugin: 'eclipse'

sourceCompatibility=1.8

// create special jar containing the starter app
jar
{
    baseName = "java-profi-db-rest"

    manifest
    {
        attributes ( "Main-Class" : "de.inden.starter.ApplicationStarter" )
    }
}

repositories
{
    mavenCentral()
}

dependencies
{
    testCompile 'junit:junit:4.11'

    // Weitere Abhängigkeiten hier eintragen
}

Aufbau dieses Buchs


Nachdem Sie nun einen groben Überblick über den Inhalt dieses Buchs haben, möchte ich die Themen der einzelnen Kapitel kurz vorstellen.

Kapitel 1 – Einstieg in XML und JSON

Weil proprietäre Formate beim Datenaustausch oftmals Probleme bereiten, spielt in heutigen Applikationen die standardisierte Darstellung von Daten eine immer größere Rolle. Kapitel 1 stellt die Datenaustauschformate XML und JSON vor, die die Interoperabilität zwischen verschiedenen Programmen erleichtern und sogar einen Austausch erlauben, wenn diese Programme in unterschiedlichen Programmiersprachen erstellt wurden.

Kapitel 2 – Einführung in Persistenz und relationale Datenbanken

Dieses Kapitel stellt wichtige Grundlagen zu Datenbanken und zu SQL vor. Insbesondere wird auch auf Möglichkeiten der Transformation von Objekten in entsprechende Repräsentationen in Datenbanken eingegangen. Dabei wird vor allem auch der sogenannte Impedance Mismatch, die Schwierigkeiten bei der Abbildung von Objekten auf Tabellen einer Datenbank, thematisiert.

Kapitel 3 – Persistenz mit JDBC

Wie man mit Java-Bordmitteln auf Datenbanken zugreifen kann, ist Thema von Kapitel 3. Zunächst betrachten wir JDBC als Basistechnologie und erstellen verschiedene Beispielapplikationen bis hin zum Mapping von Objekten in die Datenbank, dem sogenannten ORM (Object-Relational Mapping).

Kapitel 4 – Persistenz mit JPA

Das JPA (Java Persistence API) stellt eine Alternative zu JDBC dar und erleichtert die Realisierung von Persistenzlösungen mit Java, insbesondere das ORM. In Kapitel 4 werden zunächst...

Erscheint lt. Verlag 1.6.2016
Verlagsort Heidelberg
Sprache deutsch
Themenwelt Mathematik / Informatik Informatik Programmiersprachen / -werkzeuge
Schlagworte Coding-Conventions • Entwurfsmuster • Java • OO-Entwurf • Programmierstil • Refactorings
ISBN-10 3-86491-961-4 / 3864919614
ISBN-13 978-3-86491-961-9 / 9783864919619
Haben Sie eine Frage zum Produkt?
Wie bewerten Sie den Artikel?
Bitte geben Sie Ihre Bewertung ein:
Bitte geben Sie Daten ein:
PDFPDF (Wasserzeichen)
Größe: 5,5 MB

DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasser­zeichen und ist damit für Sie persona­lisiert. Bei einer missbräuch­lichen Weiter­gabe des eBooks an Dritte ist eine Rück­ver­folgung an die Quelle möglich.

Dateiformat: PDF (Portable Document Format)
Mit einem festen Seiten­layout eignet sich die PDF besonders für Fach­bücher mit Spalten, Tabellen und Abbild­ungen. Eine PDF kann auf fast allen Geräten ange­zeigt werden, ist aber für kleine Displays (Smart­phone, eReader) nur einge­schränkt geeignet.

Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.

Zusätzliches Feature: Online Lesen
Dieses eBook können Sie zusätzlich zum Download auch online im Webbrowser lesen.

Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.

EPUBEPUB (Wasserzeichen)
Größe: 5,0 MB

DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasser­zeichen und ist damit für Sie persona­lisiert. Bei einer missbräuch­lichen Weiter­gabe des eBooks an Dritte ist eine Rück­ver­folgung an die Quelle möglich.

Dateiformat: EPUB (Electronic Publication)
EPUB ist ein offener Standard für eBooks und eignet sich besonders zur Darstellung von Belle­tristik und Sach­büchern. Der Fließ­text wird dynamisch an die Display- und Schrift­größe ange­passt. Auch für mobile Lese­geräte ist EPUB daher gut geeignet.

Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür die kostenlose Software Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür eine kostenlose App.
Geräteliste und zusätzliche Hinweise

Zusätzliches Feature: Online Lesen
Dieses eBook können Sie zusätzlich zum Download auch online im Webbrowser lesen.

Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.

Mehr entdecken
aus dem Bereich
Entwicklung von GUIs für verschiedene Betriebssysteme

von Achim Lingott

eBook Download (2023)
Carl Hanser Verlag GmbH & Co. KG
39,99
Das Handbuch für Webentwickler

von Philip Ackermann

eBook Download (2023)
Rheinwerk Computing (Verlag)
49,90