Grundlagen des modularen Softwareentwurfs - Der Bau langlebiger Mikro- und Makro-Architekturen wie Microservices und SOA 2.0

Herbert Dowalil

Grundlagen des modularen Softwareentwurfs

Der Bau langlebiger Mikro- und Makro-Architekturen wie Microservices und SOA 2.0

2018

227 Seiten

Format: PDF, ePUB, Online Lesen

E-Book: €  26,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446457850

 

Inhalt

9

Vorwort

15

Danksagung

19

Der Autor

21

1 Grundlagen

23

1.1 Definition Architektur

23

1.1.1 Strukturierung in Komponenten – Modularisierung

24

1.1.2 Abläufe

25

1.1.3 Anforderungen

26

1.1.4 Technologien

27

1.1.5 Operative Systeme

27

1.2 Was Architektur definitiv NICHT ist

28

1.3 Organisation

29

1.4 Über Enterprise-Architektur (EA)

33

1.5 Evolution

35

1.5.1 Managed Evolution (Credit Suisse)

36

1.5.2 Aim42

37

1.5.3 Purer Pragmatismus

38

1.6 Dokumentation

38

1.6.1 Mikro-Architektur – Softwaredesign

38

1.6.2 Makro-Architektur

39

1.7 Digitale Transformation – Digitalisierung

39

2 Prinzipien des Software-Entwurfs

41

2.1 Keep it Simple and Stupid (KISS)

41

2.2 Don’t Repeat Yourself (DRY)

43

2.3 Information Hiding Principle

43

2.4 Open Closed Principle

46

2.5 Lose Kopplung

47

2.5.1 Code Reuse

48

2.5.2 Datenbankintegration – gemeinsames Datenmodell

48

2.5.3 Datenbankintegration – selbe Datenbank, unterschiedliche Datenmodelle

49

2.5.4 Synchroner Remote Procedure Call

50

2.5.5 Datenreplikation

50

2.5.6 Messaging

50

2.5.7 Composite-UI

51

2.6 Hohe Kohäsion

52

2.7 Separation Of Concerns

53

2.8 Hierarchischer Aufbau

56

2.9 Zusammenfassung

59

3 Mikro-Architektur – Softwaredesign

61

3.1 SOLID

62

3.1.1 Liskovsches Substitutionsprinzip

62

3.1.2 Interface Segregation Principle

64

3.1.3 Dependency Inversion Principle

65

3.2 Dependency Injection

66

3.3 Law of Demeter

67

3.4 Composition over Inheritance

68

3.5 Selbst-Dokumentation

68

3.6 Design by Contract

70

3.7 Design Pattern

72

3.7.1 Decorator und Delegate (Structural)

73

3.7.2 Adapter (Structural)

74

3.7.3 Facade (Structural)

75

3.7.4 Observer (Behavioral)

76

3.7.5 Simple Factory (Creational)

78

3.7.6 Factory Method (Creational)

79

3.7.7 Abstract Factory (Creational)

80

3.7.8 Builder (Creational)

81

4 Domänengetriebener Entwurf – Domain Driven Design (DDD)

85

4.1 Ubiquitous Language

85

4.2 Aufteilung in Subdomänen

86

4.3 Bounded Context

86

4.4 Integration

87

4.4.1 Das Problem mit dem Konformismus

88

4.5 Upstream/Downstream-Beziehungen

89

4.6 Context Map

90

4.7 Beispiel

90

4.8 Fazit

92

5 Enterprise Application Integration Pattern (EAIP)

95

5.1 Orchestrierung vs. Choreografie

96

5.2 Das Prinzip der Dumb Pipes and Smart Endpoints

96

5.3 Tooling

98

5.3.1 Message Bus

98

5.3.2 Message Broker

99

5.3.3 Enterprise Service Bus (ESB)

99

5.3.4 Business Process-Management-Systeme (BPMS)

101

5.3.5 API-Gateways

103

5.3.6 Service Discovery/Service Registration

104

6 Makro-Architektur

105

6.1 Antipattern

106

6.1.1 Maximierung des Reuse

106

6.1.2 Kanonisches Modell

107

6.1.3 Service Versioning

109

6.1.4 Zentraler Mediator – Enterprise Service Bus (ESB)

110

6.2 Empfohlene Pattern

113

6.2.1 Consumer Driven Contract Tests

113

6.2.2 Robustness Principle (Tolerant Reader)

113

6.2.3 Feature Toggles

114

6.2.4 Circuit Breaker

115

6.2.5 Bulkhead

116

6.2.6 Adapter

117

6.2.7 Backend for Frontend (BFF)

118

6.2.8 Saga

118

6.2.9 Pipes and Filters

119

6.2.10 Correlation IDs

120

6.2.11 Event Sourcing

120

7 Verteilte Systeme – Distributed Systems

123

7.1 Monolithen

124

7.1.1 Keine Continuous Delivery möglich!?

125

7.1.2 Automatische Erosion der Struktur!?

126

7.1.3 Monolithische Architekturen skalieren nicht!?

126

7.1.4 Es ist eine Frage von entweder/oder!?

129

7.2 Idempotenz

130

7.2.1 Idempotent Receiver Pattern

130

7.3 Representational State Transfer – REST

131

7.4 Konsistenz

134

7.4.1 Datenbankintegration (Konsistent)

136

7.4.2 Two Phase Commit (Konsistent)

136

7.4.3 Ein großer Datenservice (Konsistent)

136

7.4.4 Send at least once (Eventually Consistent)

137

7.4.5 Orchestrierung (Eventually Consistent)

139

7.4.6 Choreografie (Nicht automatisch Konsistent)

140

7.4.7 Event Sourcing und CQRS (Konsistent)

141

7.4.8 Zentraler Mediator Antipattern – Enterprise Service Bus (Eventually Consistent)

141

8 Service-orientierte Architektur (SOA)

143

8.1 Service-Antipattern

144

8.1.1 Service-Kategorien

144

8.1.2 Webservice vs. Service

145

8.1.3 API im Vordergrund

145

8.1.4 SOA 1.0

145

8.2 Microservices

150

8.2.1 Monolith First

154

8.2.2 Hybride

154

8.3 Nanoservices

155

8.4 Modulare SOA – Right Sized Services – SOA 2.0

156

8.5 Self Contained Systems (SCS)

157

8.6 Integration kommerzieller Systeme (Commercial off the Shelf – COTS)

158

9 Metriken

161

9.1 Unit-Test-Abdeckung und das Legacy-Code-Dilemma

162

9.2 Technische Schuld

163

9.3 Komplexität und Modulgröße

164

9.3.1 Semantische Komplexität

165

9.3.2 Strukturelle Komplexität

165

9.3.3 Verschachtelungskomplexität

166

9.4 Kohäsion

166

9.4.1 Relational Cohesion

166

9.4.2 Lack of Cohesion in Methods IV (LCOM4)

166

9.5 Component Rank

168

9.6 Software-Package-Metriken nach Robert C. Martin

168

9.6.1 Afferent Coupling (Ca)

169

9.6.2 Efferent Coupling (Ce)

169

9.6.3 Instability

170

9.7 Metriken nach John Lakos

170

9.7.1 Depends Upon und Used From

170

9.7.2 Cumulative Component Dependency (CCD)

171

9.7.3 Average Component Dependency (ACD)

171

9.7.4 Relative Average Component Dependency (RACD)

172

9.7.5 Normalized Cumulative Component Dependency (NCCD)

172

9.8 Relative Cyclicity

173

9.8.1 Azyklischer Monolith

174

9.9 Strukturkennzahlen und verteilte Systeme

175

10 Zusammenfassung

177

10.1 Die Frage nach dem „richtigen Schnitt“

177

10.1.1 Ausrichtung nach dem Kunden

177

10.1.2 Optimierung der Software

178

10.2 Geteilte Daten

179

10.3 Migration

180

10.3.1 Extraktion

180

10.3.2 APIs First

182

10.3.3 Aushöhlung

184

10.3.4 Ach wenn ich doch nur anfangen könnte!

185

10.3.5 Über die Migration der Mitarbeiter

186

10.4 Pitfalls

186

10.4.1 Es funktioniert

186

10.4.2 Enterprise- vs. Makro-Architektur

187

10.4.3 Scrum

187

10.4.4 Microservices

187

10.4.5 Vereinheitlichung

188

10.4.6 Keine klare Linie

188

10.4.7 Überbewertung des Themas Prozesse

189

10.4.8 Irrationalität

189

10.4.9 Big-Bang-Migration

192

10.4.10 Scope Creep

192

10.4.11 Elfenbeinturm

193

10.4.12 Ignorieren von Feedback zu Machbar- und Sinnhaftigkeit

193

10.4.13 Widersprüchliche Ziele

194

10.4.14 Management durch Kennzahlen

194

10.4.15 Falsche Anreize (Kobra-Effekt)

195

10.4.16 Cargo-Kult

195

10.5 War Story

196

10.6 Fazit

198

11 Umsetzung

201

11.1 Datenreplikation

201

11.1.1 Extract Transform Load (ETL)

201

11.1.2 Features der Datenbanken

201

11.1.3 Polling

201

11.1.4 Push Messaging

202

11.2 Composite UI

202

11.2.1 Partielle Integration im Web

203

11.2.2 Integration über ein Trägerportal

204

11.2.3 Vollständige Pages

205

11.2.4 Komplexe Integration

205

11.3 Design eines Moduls

206

11.4 Consumer Driven Contract Testing mit PACT

208

11.5 Modulares Design

208

11.5.1 Javascript

208

11.5.2 TypeScript

209

11.5.3 Java

210

11.5.4 Open Services Gateway initiative – OSGi

211

11.5.5 ArchUnit

212

11.5.6 Sonargraph

213

12 Glossar

217

13 Quellen

219

Index

223

Leere Seite

2

 

© 2009-2024 ciando GmbH