﻿1
00:00:01,570 --> 00:00:02,930
‫Kursleiter: Bis zu

2
00:00:02,930 --> 00:00:05,960
‫diesem Punkt haben wir nur unseren Code geschrieben,

3
00:00:05,960 --> 00:00:08,670
‫ohne viel über unsere Anwendungsarchitektur nachzudenken.

4
00:00:08,670 --> 00:00:11,200
‫Bisher war es nicht wirklich wichtig, aber

5
00:00:11,200 --> 00:00:14,550
‫jetzt, da unsere App wirklich zu wachsen beginnt, müssen wir

6
00:00:14,550 --> 00:00:15,770
‫uns Gedanken über

7
00:00:15,770 --> 00:00:19,400
‫die Art und Weise machen, wie wir entwerfen oder die Codearchitektur.

8
00:00:19,400 --> 00:00:22,320
‫Und dieser Vortrag wird nur eine kurze Einführung

9
00:00:22,320 --> 00:00:24,010
‫in die Backend-Architektur sein.

10
00:00:24,010 --> 00:00:26,893
‫Beginnend mit der MVC-Architektur.

11
00:00:28,410 --> 00:00:30,580
‫In diesem Projekt werden

12
00:00:30,580 --> 00:00:33,420
‫wir also eine weit verbreitete und bekannte

13
00:00:33,420 --> 00:00:36,300
‫Architektur verwenden, die als Model, View, Controller

14
00:00:36,300 --> 00:00:38,720
‫oder kurz MVC bezeichnet wird.

15
00:00:38,720 --> 00:00:40,000
‫Und es

16
00:00:40,000 --> 00:00:42,660
‫gibt verschiedene Möglichkeiten, die MVC-Architektur zu implementieren,

17
00:00:42,660 --> 00:00:44,530
‫einige komplexer als andere, aber

18
00:00:44,530 --> 00:00:45,840
‫wir werden sie

19
00:00:45,840 --> 00:00:48,400
‫hier auf sehr einfache Weise implementieren.

20
00:00:48,400 --> 00:00:50,080
‫Ich wollte Sie nur wissen

21
00:00:50,080 --> 00:00:52,140
‫lassen, dass Sie, wenn Sie nach MVC

22
00:00:52,140 --> 00:00:54,910
‫googeln, feststellen, dass es auf verschiedene Weise implementiert wird.

23
00:00:54,910 --> 00:00:57,850
‫Okay, in dieser Architektur befasst sich

24
00:00:57,850 --> 00:00:59,620
‫die Modellschicht mit

25
00:00:59,620 --> 00:01:02,420
‫allem, was Anwendungsdaten und die

26
00:01:02,420 --> 00:01:04,150
‫Geschäftslogik betrifft.

27
00:01:04,150 --> 00:01:06,360
‫Und wir werden auf der nächsten Folie lernen,

28
00:01:06,360 --> 00:01:07,333
‫was Geschäftslogik bedeutet.

29
00:01:08,180 --> 00:01:10,820
‫Als nächstes haben wir die Controller-Schicht und

30
00:01:10,820 --> 00:01:12,850
‫die Funktion der Controller besteht

31
00:01:12,850 --> 00:01:15,380
‫darin, die Anforderung der Anwendung zu verarbeiten,

32
00:01:15,380 --> 00:01:16,780
‫mit Modellen zu

33
00:01:16,780 --> 00:01:19,500
‫interagieren und Antworten an den Client zurückzusenden.

34
00:01:19,500 --> 00:01:22,540
‫Und all das nennt man Anwendungslogik.

35
00:01:22,540 --> 00:01:24,950
‫Schließlich ist die Ansichtsebene erforderlich, wenn

36
00:01:24,950 --> 00:01:27,880
‫wir eine grafische Oberfläche in unserer App haben.

37
00:01:27,880 --> 00:01:30,010
‫Oder mit anderen Worten, wenn wir

38
00:01:30,010 --> 00:01:32,410
‫eine serverseitig gerenderte Website erstellen, wie

39
00:01:32,410 --> 00:01:34,280
‫wir zuvor besprochen haben.

40
00:01:34,280 --> 00:01:36,870
‫In diesem Fall besteht die Ansichtsebene im Wesentlichen

41
00:01:36,870 --> 00:01:38,981
‫aus den Vorlagen, die zum Generieren

42
00:01:38,981 --> 00:01:43,060
‫der Ansicht verwendet werden, also der Website, die wir an den Client zurücksenden.

43
00:01:43,060 --> 00:01:45,690
‫Und das ist die Präsentationslogik.

44
00:01:45,690 --> 00:01:48,500
‫Im Moment erstellen wir jedoch nur eine

45
00:01:48,500 --> 00:01:51,780
‫API, sodass wir uns noch nicht wirklich um Ansichten kümmern.

46
00:01:51,780 --> 00:01:54,180
‫Das ist für etwas später im Kurs.

47
00:01:54,180 --> 00:01:57,650
‫Die Verwendung eines Musters oder einer solchen Architektur ermöglicht

48
00:01:57,650 --> 00:02:00,430
‫es uns, eine modularere Anwendung zu schreiben,

49
00:02:00,430 --> 00:02:03,180
‫die bei Bedarf viel einfacher zu

50
00:02:03,180 --> 00:02:04,550
‫warten ist.

51
00:02:04,550 --> 00:02:06,200
‫Und wir könnten noch

52
00:02:06,200 --> 00:02:08,730
‫weiter gehen und hier weitere Abstraktionsebenen hinzufügen.

53
00:02:08,730 --> 00:02:11,170
‫Aber in dieser Art von kleineren

54
00:02:11,170 --> 00:02:14,643
‫Anwendungen ist die MVC-Architektur mehr als genug für unsere Bedürfnisse.

55
00:02:15,520 --> 00:02:17,635
‫Das alles mag jetzt

56
00:02:17,635 --> 00:02:21,700
‫etwas abstrakt klingen, also werfen wir einen Blick auf MVC

57
00:02:21,700 --> 00:02:24,510
‫im Kontext unserer App und den Anfrage-Antwort-Zyklus.

58
00:02:24,510 --> 00:02:28,050
‫Alles beginnt also wie immer mit einer Anfrage.

59
00:02:28,050 --> 00:02:30,760
‫Diese Anfrage wird einen unserer Router treffen, denn denken

60
00:02:30,760 --> 00:02:33,410
‫Sie daran, dass wir mehrere Router haben.

61
00:02:33,410 --> 00:02:35,330
‫Grundsätzlich eine für

62
00:02:35,330 --> 00:02:38,390
‫jede Ressource, wie Touren, Benutzer usw.

63
00:02:38,390 --> 00:02:41,520
‫Das Ziel des Routers besteht nun darin, die Anfrage

64
00:02:41,520 --> 00:02:43,360
‫an die richtige Handler-Funktion

65
00:02:43,360 --> 00:02:46,310
‫zu delegieren, die sich in einem der Controller befindet.

66
00:02:46,310 --> 00:02:48,420
‫Und wieder wird es für

67
00:02:48,420 --> 00:02:50,320
‫jede unserer Ressourcen einen

68
00:02:50,320 --> 00:02:54,530
‫Controller geben, um diese verschiedenen Teile der App sauber zu trennen.

69
00:02:54,530 --> 00:02:57,090
‫Dann muss der Controller je nach

70
00:02:57,090 --> 00:02:59,360
‫eingehender Anfrage möglicherweise mit einem der

71
00:02:59,360 --> 00:03:01,010
‫Modelle interagieren, um beispielsweise

72
00:03:01,010 --> 00:03:02,330
‫ein bestimmtes

73
00:03:02,330 --> 00:03:04,460
‫Dokument aus der Datenbank abzurufen

74
00:03:04,460 --> 00:03:06,490
‫oder ein neues zu erstellen.

75
00:03:06,490 --> 00:03:10,350
‫Auch hier gibt es für jede Ressource eine Modelldatei.

76
00:03:10,350 --> 00:03:12,560
‫Nach dem Abrufen der Daten aus

77
00:03:12,560 --> 00:03:15,760
‫dem Modell kann der Controller dann möglicherweise bereit sein,

78
00:03:15,760 --> 00:03:19,320
‫eine Antwort an den Client zurückzusenden, die beispielsweise diese Daten enthält.

79
00:03:19,320 --> 00:03:22,240
‫Falls wir nun tatsächlich eine Website rendern möchten,

80
00:03:22,240 --> 00:03:24,100
‫ist ein weiterer Schritt erforderlich.

81
00:03:24,100 --> 00:03:26,950
‫In diesem Fall wählt der Controller nach dem

82
00:03:26,950 --> 00:03:28,490
‫Abrufen der Daten aus

83
00:03:28,490 --> 00:03:32,200
‫dem Modell eine der Ansichtsvorlagen aus und fügt die Daten ein.

84
00:03:32,200 --> 00:03:34,900
‫Diese gerenderte Website wird dann

85
00:03:34,900 --> 00:03:36,670
‫als Antwort zurückgesendet.

86
00:03:36,670 --> 00:03:38,860
‫In der Ansichtsebene einer Express-App

87
00:03:38,860 --> 00:03:41,990
‫gibt es normalerweise eine Ansichtsvorlage für jede Seite.

88
00:03:41,990 --> 00:03:43,760
‫Wie eine Tourübersichtsseite,

89
00:03:43,760 --> 00:03:46,580
‫eine Tourdetailseite oder eine Anmeldeseite.

90
00:03:46,580 --> 00:03:49,470
‫Am Beispiel unserer neuesten App natürlich.

91
00:03:49,470 --> 00:03:52,630
‫Das ist also ein breiter Überblick über die Architektur, die

92
00:03:52,630 --> 00:03:54,930
‫wir in diesem Projekt implementieren werden.

93
00:03:55,940 --> 00:03:58,050
‫Lassen Sie mich nun zum

94
00:03:58,050 --> 00:04:01,320
‫Abschluss noch etwas mehr auf Modell und Controller eingehen.

95
00:04:01,320 --> 00:04:04,110
‫Eines der großen Ziele von MVC besteht

96
00:04:04,110 --> 00:04:05,970
‫also darin, die Geschäftslogik

97
00:04:05,970 --> 00:04:08,010
‫von der Anwendungslogik zu trennen.

98
00:04:08,010 --> 00:04:10,590
‫Sie werden ständig von dieser Art von Logik

99
00:04:10,590 --> 00:04:12,420
‫hören, wenn Sie Stack

100
00:04:12,420 --> 00:04:14,260
‫Overflow oder eine ähnliche Site durchsuchen.

101
00:04:14,260 --> 00:04:17,650
‫Aber was sind diese Arten von Logik eigentlich?

102
00:04:17,650 --> 00:04:20,670
‫Nun, der Unterschied ist ein bisschen eigenwillig, aber

103
00:04:20,670 --> 00:04:22,730
‫so sehe ich ihn: Anwendungslogik ist

104
00:04:22,730 --> 00:04:25,590
‫also der gesamte Code, der sich nur um

105
00:04:25,590 --> 00:04:27,340
‫die Implementierung der

106
00:04:27,340 --> 00:04:29,120
‫Anwendung kümmert und nicht um

107
00:04:29,120 --> 00:04:31,060
‫das zugrunde liegende Geschäftsproblem, das

108
00:04:31,060 --> 00:04:33,890
‫wir tatsächlich mit der Anwendung lösen möchten .

109
00:04:33,890 --> 00:04:35,930
‫Wie zum Beispiel Führungen zeigen

110
00:04:35,930 --> 00:04:38,160
‫und verkaufen, Lagerbestände in einem Supermarkt

111
00:04:38,160 --> 00:04:40,830
‫verwalten oder zum Beispiel eine Bibliothek organisieren.

112
00:04:40,830 --> 00:04:42,670
‫Auch hier ist die Anwendungslogik

113
00:04:42,670 --> 00:04:45,470
‫die Logik, die dafür sorgt, dass die App tatsächlich funktioniert.

114
00:04:45,470 --> 00:04:49,100
‫Ein großer Teil der Anwendungslogik in Express besteht

115
00:04:49,100 --> 00:04:52,490
‫beispielsweise darin, Anfragen und Antworten zu verwalten.

116
00:04:52,490 --> 00:04:54,600
‫In gewisser Weise können wir also

117
00:04:54,600 --> 00:04:58,100
‫auch sagen, dass es bei der Anwendungslogik mehr um technische Dinge geht.

118
00:04:58,100 --> 00:05:00,490
‫Wenn wir Ansichten in unserer App

119
00:05:00,490 --> 00:05:02,280
‫haben, dient die

120
00:05:02,280 --> 00:05:04,980
‫Anwendungslogik außerdem als Brücke zwischen Modell-

121
00:05:04,980 --> 00:05:06,893
‫und Ansichtsschichten, sodass wir

122
00:05:06,893 --> 00:05:08,920
‫niemals Geschäftslogik mit Präsentationslogik vermischen.

123
00:05:08,920 --> 00:05:10,120
‫Gut?

124
00:05:10,120 --> 00:05:12,000
‫Was die Geschäftslogik betrifft,

125
00:05:12,000 --> 00:05:15,370
‫ist es der gesamte Code, der das Geschäftsproblem

126
00:05:15,370 --> 00:05:17,490
‫löst, das wir lösen wollten.

127
00:05:17,490 --> 00:05:21,340
‫Sagen wir noch einmal, unser Ziel ist es, Kunden Touren zu zeigen und

128
00:05:21,340 --> 00:05:22,920
‫diese dann zu verkaufen.

129
00:05:22,920 --> 00:05:26,491
‫Und der Code, der in direktem Zusammenhang mit den

130
00:05:26,491 --> 00:05:28,210
‫Geschäftsregeln, der Funktionsweise des

131
00:05:28,210 --> 00:05:31,440
‫Geschäfts und den Geschäftsanforderungen steht, ist die Geschäftslogik.

132
00:05:31,440 --> 00:05:34,580
‫Wenn das jetzt noch etwas zu philosophisch klingt,

133
00:05:34,580 --> 00:05:37,810
‫einige Beispiele im Zusammenhang mit unserer neuesten App

134
00:05:37,810 --> 00:05:41,160
‫sind das Anlegen neuer Touren in der Datenbank der

135
00:05:41,160 --> 00:05:45,270
‫App, die Überprüfung des Passworts eines Benutzers beim Einloggen, das Validieren

136
00:05:45,270 --> 00:05:47,320
‫von Benutzereingaben oder das Sicherstellen,

137
00:05:47,320 --> 00:05:50,860
‫dass nur Benutzer wer eine bestimmte Tour gekauft hat,

138
00:05:50,860 --> 00:05:52,220
‫kann sie bewerten.

139
00:05:52,220 --> 00:05:55,490
‫All diese Dinge beziehen sich also auf das Geschäft

140
00:05:55,490 --> 00:05:58,200
‫selbst und sind daher Teil der Geschäftslogik.

141
00:05:58,200 --> 00:06:00,090
‫Nun müssen wir

142
00:06:00,090 --> 00:06:02,320
‫bedenken, dass Anwendungslogik und Geschäftslogik

143
00:06:02,320 --> 00:06:05,480
‫fast nicht vollständig voneinander getrennt werden können

144
00:06:05,480 --> 00:06:07,670
‫und sich daher manchmal überschneiden.

145
00:06:07,670 --> 00:06:09,360
‫Aber wir sollten unser

146
00:06:09,360 --> 00:06:12,200
‫Bestes tun, um die Anwendungslogik in unseren

147
00:06:12,200 --> 00:06:15,440
‫Controllern und die Geschäftslogik in unseren Modellen zu behalten.

148
00:06:15,440 --> 00:06:17,260
‫Und es gibt sogar diese

149
00:06:17,260 --> 00:06:19,400
‫Philosophie der fetten Modelle, dünner Controller,

150
00:06:19,400 --> 00:06:21,170
‫die besagt, dass wir

151
00:06:21,170 --> 00:06:24,140
‫so viel Logik wie möglich in die Modelle verlagern

152
00:06:24,140 --> 00:06:28,180
‫sollten, um die Controller so einfach und schlank wie möglich zu halten.

153
00:06:28,180 --> 00:06:31,450
‫Ein Fat-Modell wird also so viel Geschäftslogik haben, wie

154
00:06:31,450 --> 00:06:33,210
‫wir können, und ein Thin-Controller

155
00:06:33,210 --> 00:06:36,700
‫wird so wenig Logik wie möglich haben, sodass der Controller

156
00:06:36,700 --> 00:06:38,210
‫wirklich hauptsächlich für

157
00:06:38,210 --> 00:06:41,410
‫die Verwaltung der Anforderungen und Antworten der Anwendung

158
00:06:41,410 --> 00:06:42,500
‫zuständig ist.

159
00:06:42,500 --> 00:06:43,440
‫Okay?

160
00:06:43,440 --> 00:06:46,060
‫Behalten Sie all dies jetzt im

161
00:06:46,060 --> 00:06:49,193
‫Hinterkopf, während wir mit der Entwicklung unserer Anwendungen fortfahren.

