Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Vorwort zur ersten Auflage
21
1 Einführung
23
1.1 Lehre und Praxis – der Unterschied
23
1.1.1 Gute Software, schlechte Software
24
1.1.2 Wege zur Lösung
25
1.2 Das Fallbeispiel
27
1.3 Die einzelnen Kapitel
28
2 Softwarearchitektur
35
2.1 Einführung
36
2.1.1 Das Problem
36
2.1.2 Gute Softwarearchitektur, schlechte Softwarearchitektur
37
2.1.3 Aufgaben
38
2.1.4 Anwendungstypen
39
2.1.5 Der Architekt
40
2.2 Anforderungen
42
2.2.1 Arten von Anforderungen
42
2.2.2 Anatomie einer Anforderung
45
2.2.3 Das richtige Maß
47
2.3 Komponenten
48
2.3.1 Komponenten identifizieren
48
2.3.2 Beziehungen
51
2.4 Prozesse
52
2.4.1 Was ist ein Prozess?
53
2.4.2 Geschäftsprozessmodellierung
54
2.4.3 Auswirkungen auf die Architektur
55
2.5 Layer (Schichten)
57
2.5.1 Grundlagen
57
2.5.2 Layer vs. Tier
60
2.5.3 Die Fassade
60
2.5.4 Presentation Layer
61
2.5.5 Business Layer
64
2.5.6 Data Layer
68
2.6 Tier und verteilte Software
73
2.6.1 Gründe für oder gegen Verteilung
73
2.6.2 Designmerkmale verteilter Architekturen
75
2.6.3 Ebenen für die Verteilung
76
2.6.4 Die wichtigsten Fragen für Architekten
77
2.7 Designmerkmale
78
2.7.1 Kopplung
78
2.7.2 Ausfallsicherheit
80
2.7.3 Performance
83
2.7.4 Sicherheit
88
2.7.5 Validierung
91
2.7.6 Lokalisierung
93
2.7.7 Statusinformationen
94
2.7.8 Interoperabilität und Integration
95
2.7.9 Die Admin-Sichtweise
98
2.7.10 Transaktionen und Gleichzeitigkeit (Concurrency)
102
2.7.11 Fehlerbehandlung
108
2.8 Architekturmodelle
111
2.8.1 Monolithische Anwendungen
111
2.8.2 Client-Server-Architektur
111
2.8.3 Mehrschichtige Anwendungen
112
2.8.4 Serviceorientierte Architekturen (SOA)
112
2.9 Vorgehensweise
116
2.9.1 Schritt 1: Architekturziele definieren
116
2.9.2 Schritt 2: Umfeld analysieren
117
2.9.3 Schritt 3: Entwurf, Review und Iteration
117
2.9.4 Schritt 4: Technologieentscheidung
117
2.9.5 Schritt 5: Dokumentation
118
2.10 Dokumentation
118
2.10.1 Was eine gute Dokumentation auszeichnet
118
2.10.2 Modelle
119
2.10.3 Inhalt
122
2.11 Was noch zu sagen wäre
126
3 Softwaredesign
127
3.1 Grundlegende Designziele
128
3.1.1 Erfüllung der Funktion
128
3.1.2 Zuverlässigkeit und Robustheit
129
3.1.3 Wartbarkeit
129
3.1.4 Erweiterbarkeit
130
3.2 Objektorientierte Analyse und Design
131
3.2.1 Gründe und Aufgaben der OOA/OOD
132
3.2.2 Das Fallbeispiel
133
3.2.3 Abstraktion und Hierarchie
134
3.2.4 Objekte und Klassen
136
3.2.5 Beziehungen
147
3.2.6 War es das?
155
3.3 Designentscheidungen
157
3.3.1 Gutes Design, schlechtes Design
157
3.3.2 Exception-Handling
163
3.3.3 Logging
165
3.3.4 Datenmodell
165
3.4 Schnittstellen und Integration
165
3.4.1 Integration
168
3.4.2 Unterscheidungsmöglichkeiten
169
3.4.3 Mindeststandards
172
3.5 Benutzeroberflächen
176
3.5.1 Die richtige Technologie
178
3.5.2 Anforderungen an eine gute grafische Benutzeroberfläche
180
3.5.3 Fallstudie: Entwicklung des Kalimba.KeyAccount Systems
188
3.5.4 Der »Rest«
192
3.6 Konfiguration
193
3.6.1 Grundlegendes zu Konfigurationen
194
3.6.2 .NET-Konfigurationsdateien
197
3.6.3 Datenbankkonfiguration
207
3.7 Vom Umgang mit der Zeit in Anwendungen
209
3.7.1 Dauer und Wahrnehmung
211
3.7.2 Anwenderfreundliche Informationsdialoge
216
3.7.3 Sonstige Tipps und Tricks
218
3.8 Tutorial: Die Enterprise Library
221
3.8.1 Der Logging Application Block
222
3.8.2 Der Exception Handling Application Block
230
4 .NET für Fortgeschrittene
237
4.1 Parallele Verarbeitung
237
4.1.1 Wann lohnt sich parallele Verarbeitung überhaupt?
238
4.1.2 Parallelität in der Praxis
240
4.1.3 Was sind Threads?
246
4.1.4 Multithreading in .NET
247
4.1.5 Klassische Threads
248
4.1.6 Thread Pools
255
4.1.7 Timer
256
4.1.8 Task Parallel Library
257
4.1.9 Async und Await
269
4.1.10 Thread-Synchronisierung
278
4.2 Fehlerbehandlung
288
4.2.1 Was ist eine Exception?
289
4.2.2 Der Status
290
4.2.3 Try
291
4.2.4 Catch
292
4.2.5 Finally
299
4.2.6 System.Exception
300
4.2.7 Eigene Exception-Klassen
301
4.2.8 Zum Schluss
302
4.3 Reguläre Ausdrücke
304
4.3.1 Reguläre Ausdrücke in .NET
304
4.3.2 Alternative und Gruppierung
307
4.3.3 Nach reservierten Zeichen suchen
307
4.3.4 Zeichenauswahl
307
4.3.5 Quantifizierer
309
4.3.6 Kontextsensitive Bedingungen
310
4.3.7 Suchoptionen
311
4.3.8 Gruppen
312
4.4 Transaktionen
314
4.4.1 Wozu Transaktionen?
314
4.4.2 Merkmale von Transaktionen
315
4.4.3 TransactionScope
316
4.4.4 Committable Transaction
319
4.4.5 Tracing
321
4.5 Erweiterungsmethoden
322
4.5.1 Erweiterungsmethoden schreiben
322
4.5.2 Vorteile, Nachteile, Empfehlungen
324
4.6 Serialisierung
325
4.6.1 Ein Beispiel
326
4.6.2 Serialisierer
328
4.6.3 BinaryFormatter
329
4.6.4 XmlSerializer
332
4.7 Automatische Speicherverwaltung
334
4.7.1 Speicherzuteilung
334
4.7.2 Garbage Collection
335
4.7.3 Finalisierung
341
4.7.4 Monitoring
345
5 Professionell codieren
347
5.1 Was ist sauber und strukturiert?
348
5.1.1 Die grundlegenden Probleme
348
5.1.2 Was zeichnet guten Code aus?
351
5.2 Code-Styleguides
353
5.3 Der VB-Faktor
354
5.4 Gut benennen
356
5.4.1 Deutsch oder Englisch
356
5.4.2 Aussagekräftig
357
5.4.3 Einzahl oder Mehrzahl
359
5.4.4 Case-(In)sensitive
360
5.4.5 camelCase / PascalCase
360
5.4.6 Leerwörter, Weasle-Wörter und reservierte Wörter
361
5.4.7 Feste Namenskonventionen
362
5.4.8 .NET-Konventionen
362
5.5 Sauber formatieren
364
5.5.1 Struktur
364
5.5.2 Formatierung
368
5.6 Sinnvoll kommentieren
373
5.6.1 Selbstverständliches
375
5.6.2 Kürze und Prägnanz
375
5.6.3 'TODO
375
5.6.4 Kommentare in Visual Studio
376
5.6.5 Ort
377
5.6.6 Die richtige Zeit
377
5.6.7 Aktualität
377
5.7 Klassen und Klassenhierarchien
378
5.7.1 Klasse oder Schnittstelle?
378
5.7.2 Klasse oder Structure?
380
5.7.3 Klassengröße
380
5.7.4 Zuständigkeit
381
5.7.5 Erweiterbarkeit
381
5.7.6 Abstrakte Klassen
384
5.7.7 Statische Klassen
384
5.8 Funktionen
385
5.8.1 Funktionsgröße
385
5.8.2 Zuständigkeit
385
5.8.3 Konstruktoren
386
5.8.4 Eigenschaft oder Funktion?
387
5.8.5 Parameter
388
5.8.6 Erweiterungsmethoden
389
5.9 Schnittstellen
390
5.10 Enums
391
5.11 Eigenschaften
392
5.12 Exceptions
393
5.12.1 Wann?
393
5.12.2 Wo?
394
5.12.3 Wie?
394
5.13 Refactoring
397
5.13.1 Gründe
397
5.13.2 Code-Smells
398
5.13.3 Der Prozess
399
5.13.4 Tools
400
5.13.5 Refactoring-Muster
400
5.14 Aus der Praxis: Codeanalyse in Visual Studio 2012
406
6 Windows Communication Foundation
411
6.1 Services im Überblick
411
6.2 Der erste WCF-Service
418
6.2.1 Das Projekt
418
6.2.2 Der Service
421
6.2.3 Die Konfigurationsdatei web.config
423
6.2.4 Der Client
424
6.3 Anatomie eines WCF-Service
429
6.3.1 Endpunkte
429
6.3.2 Adressen
436
6.3.3 Binding
437
6.3.4 Contracts
440
6.3.5 Konfiguration
441
6.3.6 Transportsitzung
447
6.4 Hosting
448
6.4.1 Merkmale eines gutes Hosts
449
6.4.2 Visual Studio 2012
450
6.4.3 Selfhosting
451
6.4.4 NT-Services
455
6.4.5 IIS
460
6.4.6 WAS
467
6.4.7 AppFabric
471
6.4.8 Entscheidungshilfe
474
6.5 Clients
475
6.5.1 Proxy erzeugen
475
6.5.2 Details zum erzeugten Proxy
480
6.5.3 Proxys verwenden
483
6.5.4 ChannelFactory
490
6.6 Services im Detail
491
6.6.1 Service Contracts
491
6.6.2 Data Contracts
498
6.6.3 Kommunikationsmuster
513
6.7 Fehlerbehandlung
520
6.7.1 Grundlagen
521
6.7.2 FaultException
524
6.7.3 SOAP Faults
525
6.8 Transaktionen
528
6.8.1 Verteilte Transaktionen
529
6.8.2 Transaktionen in WCF
534
6.8.3 Wegweiser
540
6.8.4 Ressourcenkonflikte
542
6.9 Instanzen
544
6.9.1 Instanziierungsmodi
545
6.9.2 Lastbegrenzung
554
6.10 Sicherheit
555
6.10.1 Einführung
557
6.10.2 Transportweg und Nachricht sichern
561
6.10.3 Detailkonfiguration
562
6.10.4 Identität
566
6.10.5 Autorisierung
569
6.11 Aus der Praxis: WCF erweitern
572
6.11.1 Schritt 1: Das Projekt einrichten
573
6.11.2 Schritt 2: Das Transferobjekt
573
6.11.3 Schritt 3: Anhängen des Transferobjekts an eine Nachricht
575
6.11.4 Schritt 4: Der Client
578
6.11.5 Schritt 5: Der Service
578
6.11.6 Schritt 6: Konfiguration
578
6.11.7 Schritt 7: Test
579
6.12 Tutorial: Message Queuing
580
6.12.1 Einführung
580
6.12.2 Schritt 1: MSMQ installieren
582
6.12.3 Schritt 2: Queues anlegen
583
6.12.4 Schritt 3: Projekte einrichten
584
6.12.5 Schritt 4: CustomerPortalService
585
6.12.6 Schritt 5: SalesPortalService
585
6.12.7 Schritt 6: Implementierungen
586
6.12.8 Schritt 7: Hosting
590
6.12.9 Schritt 8: Konfiguration
591
6.12.10 Schritt 9: Tests
593
7 Datenbank und Datenzugriff
597
7.1 .NET im SQL Server
599
7.1.1 Vorbereitungen
599
7.1.2 Benutzerdefinierte Datentypen
600
7.1.3 Sicherheit
607
7.1.4 Stored Procedures
608
7.1.5 Benutzerdefinierte Funktionen
610
7.1.6 Trigger
611
7.1.7 Benutzerdefinierte Aggregatfunktionen
614
7.1.8 Einsatz in der Praxis
616
7.2 XML in der Datenbank
619
7.2.1 Tabelle mit XML-Daten erzeugen
620
7.2.2 Daten hinzufügen
620
7.2.3 Daten auslesen
621
7.2.4 Indizes anlegen
622
7.2.5 Daten abfragen
623
7.2.6 Daten modifizieren
626
7.3 Volltextsuche
628
7.3.1 Installation
630
7.3.2 Volltextkatalog anlegen
631
7.3.3 Daten abfragen
635
7.4 Filestream
640
7.4.1 Filestream installieren
641
7.4.2 Filestream aktivieren
641
7.4.3 Datenbank für Filestream einrichten
642
7.4.4 Tabellen um Filestream-Spalten erweitern
643
7.4.5 Dateien ablegen mit SqlFileStream
644
7.4.6 Die Verwaltung der Filestream-Dateien
647
7.4.7 Dateien abrufen
647
7.4.8 Volltext und Filestream
648
7.4.9 Aus der Praxis
649
7.5 Das ADO.NET Entity Framework
650
7.5.1 Einführung
650
7.5.2 Projekt einrichten
656
7.5.3 Das Modell erweitern
661
7.5.4 Daten abfragen
663
7.5.5 Daten hinzufügen und ändern
669
7.5.6 SaveChanges und Gleichzeitigkeit
673
7.5.7 Was noch zu sagen wäre
676
7.6 WCF Data Services
676
7.6.1 Übersicht
676
7.6.2 Einfachen WCF Data Service erstellen
678
7.6.3 WCF Data Service testen
679
7.6.4 Zugriff aus einer .NET-Anwendung
682
7.6.5 Empfehlungen für den Einsatz
688
7.7 LINQ to XML
690
7.7.1 Statische XML-Dateien erstellen
691
7.7.2 XML-Dateien aus vorhandenen Strukturen erstellen
694
7.7.3 Erweiterungsmethoden
694
7.7.4 XML-Dateien laden
695
7.7.5 Abfragen
696
7.7.6 XML-Daten verändern
698
7.7.7 Anwendung in der Praxis
699
7.8 Was noch zu sagen wäre
700
8 Workflow Foundation
703
8.1 Einführung
703
8.1.1 Warum Workflows?
704
8.1.2 Der Workflow
710
8.1.3 Workflow Designer
713
8.1.4 Windows Workflow Foundation im Überblick
719
8.2 Fallbeispiel
722
8.3 Der erste sequenzielle Workflow
724
8.3.1 Das Projekt einrichten
724
8.3.2 Den Workflow gestalten
726
8.3.3 Der weitere Ausbau
733
8.4 Der erste Flowchart-Workflow
735
8.4.1 Wareneingang reloaded
735
8.4.2 Den Wareneingangs-Workflow umbauen
736
8.5 Workflows laden und ausführen
740
8.5.1 Workflows in XAML ausführen
740
8.5.2 Workflows in Code ausführen
741
8.5.3 WorkflowApplication
741
8.6 Eingebaute Aktivitäten verwenden
743
8.6.1 Auflistung
743
8.6.2 Parallele Verarbeitung
749
8.6.3 Fehlerbehandlung
754
8.6.4 Ausführungssteuerung
757
8.6.5 Ereignissteuerung
764
8.6.6 TerminateWorkflow
770
8.6.7 Sonstige Aktivitäten
771
8.7 Eigene Aktivitäten entwickeln
771
8.7.1 Aktivitäten im Überblick
772
8.7.2 Lebenszyklus
776
8.7.3 CodeActivity
777
8.7.4 CodeActivity mit Rückgabewert
780
8.7.5 CodeActivity mit Validierung
781
8.7.6 NativeActivity
785
8.7.7 ActivityDesigner
790
8.7.8 Bookmarks
795
8.7.9 Was noch zu sagen wäre ...
796
8.8 Transaktionen
797
8.8.1 TransactionScope
798
8.8.2 Kompensationen
800
8.9 Persistenz
808
8.9.1 InstanceStore
809
8.9.2 SQL Server einrichten
809
8.9.3 Änderungen an der Workflow-Anwendung
810
8.9.4 Speichern im Code
812
8.9.5 Persistenzschutz
812
8.10 Tracking und Tracing
813
8.10.1 Tracking-Grundlagen
813
8.10.2 Tracking-Objekte
815
8.10.3 Fallbeispiel
816
8.10.4 Tracing
823
8.11 Workflow Services
825
8.11.1 Grundlagen
826
8.11.2 Aktivitäten
831
8.11.3 Fallbeispiel – Teil 1: Der Laborservice
833
8.11.4 Fallbeispiel – Teil 2: WF ruft WCF
841
8.11.5 Fallbeispiel – Teil 3: Der Laborclient
844
8.11.6 Fallbeispiel – Teil 4: WCF ruft WF
845
8.11.7 Fallbeispiel – Teil 5: Persistence
856
8.11.8 Correlation
857
8.11.9 Zum Schluss
860
8.12 State Machine Workflows
861
8.12.1 Anfangszustand
863
8.12.2 Endzustand
865
8.12.3 Zustände dazwischen
866
8.12.4 Zustandsübergänge
867
8.12.5 Übungsempfehlung
869
8.13 Designer Rehosting
870
8.13.1 Fallbeispiel
871
8.13.2 Den Designer einbinden
871
8.13.3 Die Toolbox bestücken
875
9 Windows 8 und WinRT
879
9.1 Einführung
880
9.1.1 Laufzeitvoraussetzungen
881
9.1.2 Das Windows 8-Design
882
9.1.3 Deployment und der Windows 8 App Store
888
9.1.4 Prozesse in WinRT und das Windows Application Model
889
9.2 Fallbeispiel
891
9.3 Projekt einrichten
892
9.3.1 Voraussetzungen
892
9.3.2 Templates
892
9.3.3 Projekt anlegen und einrichten
895
9.4 Seiten hinzufügen
899
9.4.1 Das Navigationskonzept
899
9.4.2 Seiten hinzufügen
900
9.4.3 Startseite festlegen
902
9.4.4 Anwendung starten
902
9.5 Daten hinzufügen
903
9.5.1 Klassenmodell
903
9.5.2 Von XML in Klassenhierarchie laden
905
9.5.3 Ressource hinzufügen
906
9.5.4 Daten beim Aufruf der App laden
907
9.5.5 Daten an Steuerelement binden
907
9.6 Die Lexikonseite
910
9.6.1 Allgemeines zur Navigation
910
9.6.2 Navigation zur Lexikonseite
911
9.6.3 Lexikonseite: Produkte anzeigen
912
9.6.4 Lexikonseite: Lexikoneintrag anzeigen
915
9.7 Die Bestellseite und die App Bar
919
9.7.1 App Bars in eigenen Anwendungen
919
9.7.2 Eine App Bar hinzufügen
920
9.8 Die Warenkorbseite
921
9.8.1 Die Anzeige
922
9.8.2 Die App Bar
923
9.8.3 Änderungen am Datenmodell
924
9.9 Die Bestellbestätigungsseite
926
9.10 Lebenszyklus- und Zustandsmanagement
927
9.10.1 Einführung
927
9.10.2 Anwendungsdaten
928
9.10.3 Sitzungsdaten - Framenavigation
928
9.10.4 Sitzungsdaten – Zustand der Seiten
932
9.11 Contracts
933
9.11.1 Die Suche
933
9.11.2 Die Suche implementieren
934
9.11.3 Testen
939
9.12 Für verschiedene Layouts entwickeln
940
9.12.1 Der Simulator
941
9.12.2 Verschiedene Formate
942
9.12.3 Funktionsweise
946
9.12.4 Empfehlungen
947
10 Softwaretests
949
10.1 Grundlagen
951
10.1.1 Ziele und Aufgaben
951
10.1.2 Übersicht und Einteilung der Tests
954
10.1.3 Vom richtigen Zeitpunkt
958
10.1.4 Der Tester und sein Team
961
10.1.5 Der Testablauf
965
10.1.6 Kleine Fehlerkunde
973
10.2 Testplanung und -organisation
979
10.2.1 Release-Management
979
10.2.2 Das Testteam
980
10.2.3 Testfälle
985
10.3 Testumgebung
988
10.3.1 Voraussetzungen
989
10.3.2 Die zu testende Software
990
10.3.3 Daten
990
10.3.4 Rechner und Betriebssystem
993
10.3.5 Server- und Zusatzkomponenten
994
10.3.6 Tools
995
10.4 Testverfahren und -werkzeuge
995
10.4.1 Exploratives Testen
995
10.4.2 Test-to-pass vs. test-to-fail
995
10.4.3 Äquivalenzklassenbildung
996
10.4.4 Grenzwerte
998
10.4.5 Sinnlose Daten
1000
10.4.6 Programmzustände
1000
10.4.7 Entscheidungstabellen
1001
10.4.8 Ablaufpläne
1002
10.4.9 Geschäftsprozessmodelle
1004
10.4.10 Continuous Delivery
1004
10.5 Testarten
1008
10.5.1 Test der Spezifikation
1008
10.5.2 Unit-Test
1011
10.5.3 Komponententest
1013
10.5.4 Usability-Test
1015
10.5.5 Systemtest
1017
10.5.6 Feldtest
1019
10.5.7 Abnahmetest
1020
10.5.8 Codereview
1022
10.5.9 Der Rest
1025
10.6 Workshop: Unit-Tests mit Visual Studio
1027
10.6.1 Anlegen eines Testprojekts
1027
10.6.2 Hinzufügen der Unit-Tests
1028
10.6.3 Codeabdeckung
1032
10.6.4 Praktische Empfehlungen
1034
11 Softwarepflege
1037
11.1 Release Management
1038
11.1.1 Begriffe
1038
11.1.2 Der Release-Prozess
1039
11.2 Anforderungen
1047
11.2.1 Einführung
1048
11.2.2 Die verschiedenen Sichtweisen
1050
11.2.3 Anforderungen an eine Anforderung
1052
11.3 Zeitschätzung
1056
11.3.1 Was ist eine Zeitschätzung?
1056
11.3.2 Herausforderungen einer Zeitschätzung
1058
11.3.3 Die lernende Organisation
1065
11.3.4 Woher kommen Zeitüberschreitungen?
1068
11.3.5 Methoden der Zeitschätzung
1071
Zum Schluss
1083
Index
1085