﻿1
00:00:01,570 --> 00:00:02,930
‫Istruttore: Fino a

2
00:00:02,930 --> 00:00:05,960
‫questo punto, abbiamo appena scritto il nostro

3
00:00:05,960 --> 00:00:08,670
‫codice senza pensare molto all'architettura dell'applicazione.

4
00:00:08,670 --> 00:00:11,200
‫Non era molto importante fino ad ora,

5
00:00:11,200 --> 00:00:14,550
‫ma ora che la nostra app sta davvero iniziando a

6
00:00:14,550 --> 00:00:15,770
‫crescere, dobbiamo iniziare

7
00:00:15,770 --> 00:00:19,400
‫a preoccuparci del modo in cui progettiamo o dell'architettura del codice.

8
00:00:19,400 --> 00:00:22,320
‫E questa lezione sarà solo una breve

9
00:00:22,320 --> 00:00:24,010
‫introduzione all'architettura di back-end.

10
00:00:24,010 --> 00:00:26,893
‫A partire dall'architettura MVC.

11
00:00:28,410 --> 00:00:30,580
‫Quindi, in questo

12
00:00:30,580 --> 00:00:33,420
‫progetto, utilizzeremo un'architettura ampiamente utilizzata

13
00:00:33,420 --> 00:00:36,300
‫e ben nota chiamata modello, vista,

14
00:00:36,300 --> 00:00:38,720
‫controller o MVC in breve.

15
00:00:38,720 --> 00:00:40,000
‫E ci

16
00:00:40,000 --> 00:00:42,660
‫sono diversi modi di implementare l'architettura MVC,

17
00:00:42,660 --> 00:00:44,530
‫alcuni più complessi di

18
00:00:44,530 --> 00:00:45,840
‫altri, ma qui

19
00:00:45,840 --> 00:00:48,400
‫lo implementeremo in modo molto semplice.

20
00:00:48,400 --> 00:00:50,080
‫Volevo solo farti sapere

21
00:00:50,080 --> 00:00:52,140
‫che se cerchi MVC su

22
00:00:52,140 --> 00:00:54,910
‫Google, lo troverai implementato in modi diversi.

23
00:00:54,910 --> 00:00:57,850
‫Ok, comunque, in questa architettura, il livello del

24
00:00:57,850 --> 00:00:59,620
‫modello riguarda tutto ciò che

25
00:00:59,620 --> 00:01:02,420
‫riguarda i dati delle applicazioni e la

26
00:01:02,420 --> 00:01:04,150
‫logica di business.

27
00:01:04,150 --> 00:01:06,360
‫E impareremo cosa significa la logica aziendale

28
00:01:06,360 --> 00:01:07,333
‫nella prossima diapositiva.

29
00:01:08,180 --> 00:01:10,820
‫Successivamente, abbiamo il livello del controller

30
00:01:10,820 --> 00:01:12,850
‫e la funzione dei

31
00:01:12,850 --> 00:01:15,380
‫controller è gestire la richiesta dell'applicazione,

32
00:01:15,380 --> 00:01:16,780
‫interagire con

33
00:01:16,780 --> 00:01:19,500
‫i modelli e inviare risposte al client.

34
00:01:19,500 --> 00:01:22,540
‫E tutto ciò si chiama logica dell'applicazione.

35
00:01:22,540 --> 00:01:24,950
‫Infine, il livello di visualizzazione è

36
00:01:24,950 --> 00:01:27,880
‫necessario se abbiamo un'interfaccia grafica nella nostra app.

37
00:01:27,880 --> 00:01:30,010
‫O in altre parole, se stiamo

38
00:01:30,010 --> 00:01:32,410
‫costruendo un sito Web renderizzato lato server,

39
00:01:32,410 --> 00:01:34,280
‫come abbiamo detto prima.

40
00:01:34,280 --> 00:01:36,870
‫In questo caso, il livello di visualizzazione è

41
00:01:36,870 --> 00:01:38,981
‫costituito sostanzialmente dai modelli utilizzati

42
00:01:38,981 --> 00:01:43,060
‫per generare la visualizzazione, quindi il sito Web che invieremo al cliente.

43
00:01:43,060 --> 00:01:45,690
‫E questa è la logica di presentazione.

44
00:01:45,690 --> 00:01:48,500
‫Per ora, stiamo solo creando un'API,

45
00:01:48,500 --> 00:01:51,780
‫quindi non siamo ancora preoccupati per le visualizzazioni.

46
00:01:51,780 --> 00:01:54,180
‫Questo è per un po' più avanti nel corso.

47
00:01:54,180 --> 00:01:57,650
‫Quindi, l'utilizzo di un modello o di un'architettura come questa

48
00:01:57,650 --> 00:02:00,430
‫ci consente di scrivere un'applicazione più modulare, che

49
00:02:00,430 --> 00:02:03,180
‫sarà molto più facile da mantenere in

50
00:02:03,180 --> 00:02:04,550
‫scala, se necessario.

51
00:02:04,550 --> 00:02:06,200
‫E potremmo andare ancora

52
00:02:06,200 --> 00:02:08,730
‫oltre, e aggiungere più livelli di astrazione qui.

53
00:02:08,730 --> 00:02:11,170
‫Ma in questo tipo di applicazione più

54
00:02:11,170 --> 00:02:14,643
‫piccola, l'architettura MVC è più che sufficiente per le nostre esigenze.

55
00:02:15,520 --> 00:02:17,635
‫Ora, tutto questo può sembrare

56
00:02:17,635 --> 00:02:21,700
‫un po' astratto, quindi diamo un'occhiata a MVC nel contesto

57
00:02:21,700 --> 00:02:24,510
‫della nostra app e al ciclo richiesta-risposta.

58
00:02:24,510 --> 00:02:28,050
‫Quindi, come sempre, tutto inizia con una richiesta.

59
00:02:28,050 --> 00:02:30,760
‫Quella richiesta colpirà uno dei nostri router,

60
00:02:30,760 --> 00:02:33,410
‫perché ricorda, abbiamo più router.

61
00:02:33,410 --> 00:02:35,330
‫Fondamentalmente, uno per

62
00:02:35,330 --> 00:02:38,390
‫ogni risorsa, come tour, utenti, eccetera.

63
00:02:38,390 --> 00:02:41,520
‫Ora l'obiettivo del router è delegare la richiesta

64
00:02:41,520 --> 00:02:43,360
‫alla corretta funzione del

65
00:02:43,360 --> 00:02:46,310
‫gestore, che sarà in uno dei controller.

66
00:02:46,310 --> 00:02:48,420
‫E ancora, ci sarà un

67
00:02:48,420 --> 00:02:50,320
‫controller per ciascuna delle

68
00:02:50,320 --> 00:02:54,530
‫nostre risorse, per mantenere queste diverse parti dell'app ben separate.

69
00:02:54,530 --> 00:02:57,090
‫Quindi, a seconda della richiesta in arrivo,

70
00:02:57,090 --> 00:02:59,360
‫il controller potrebbe dover interagire con

71
00:02:59,360 --> 00:03:01,010
‫uno dei modelli, ad

72
00:03:01,010 --> 00:03:02,330
‫esempio per

73
00:03:02,330 --> 00:03:04,460
‫recuperare un determinato documento dal database

74
00:03:04,460 --> 00:03:06,490
‫o per crearne uno nuovo.

75
00:03:06,490 --> 00:03:10,350
‫Ancora una volta, c'è un file modello per ogni risorsa.

76
00:03:10,350 --> 00:03:12,560
‫Dopo aver ottenuto i dati

77
00:03:12,560 --> 00:03:15,760
‫dal modello, il controller potrebbe essere pronto a

78
00:03:15,760 --> 00:03:19,320
‫inviare una risposta al client, ad esempio, contenente quei dati.

79
00:03:19,320 --> 00:03:22,240
‫Ora, nel caso in cui desideriamo effettivamente eseguire il rendering di un

80
00:03:22,240 --> 00:03:24,100
‫sito Web, è necessario un ulteriore passaggio.

81
00:03:24,100 --> 00:03:26,950
‫In questo caso, dopo aver ottenuto i dati

82
00:03:26,950 --> 00:03:28,490
‫dal modello, il controller

83
00:03:28,490 --> 00:03:32,200
‫selezionerà uno dei modelli di visualizzazione e vi inserirà i dati.

84
00:03:32,200 --> 00:03:34,900
‫Il sito Web reso verrà quindi

85
00:03:34,900 --> 00:03:36,670
‫restituito come risposta.

86
00:03:36,670 --> 00:03:38,860
‫Nel livello di visualizzazione di un'app Express

87
00:03:38,860 --> 00:03:41,990
‫di solito è presente un modello di visualizzazione per ogni pagina.

88
00:03:41,990 --> 00:03:43,760
‫Come una pagina di panoramica del

89
00:03:43,760 --> 00:03:46,580
‫tour, una pagina dei dettagli del tour o una pagina di accesso.

90
00:03:46,580 --> 00:03:49,470
‫Nell'esempio della nostra ultima app ovviamente.

91
00:03:49,470 --> 00:03:52,630
‫Quindi, questa è un'ampia panoramica dell'architettura che

92
00:03:52,630 --> 00:03:54,930
‫implementeremo in questo progetto.

93
00:03:55,940 --> 00:03:58,050
‫Ora, per finire, vorrei entrare

94
00:03:58,050 --> 00:04:01,320
‫un po' più in dettaglio sul modello e sul controller.

95
00:04:01,320 --> 00:04:04,110
‫Quindi, uno dei grandi obiettivi di MVC

96
00:04:04,110 --> 00:04:05,970
‫è separare la

97
00:04:05,970 --> 00:04:08,010
‫logica aziendale dalla logica dell'applicazione.

98
00:04:08,010 --> 00:04:10,590
‫Sentirai parlare di questi tipi di logica tutto il

99
00:04:10,590 --> 00:04:12,420
‫tempo quando navighi su Stack

100
00:04:12,420 --> 00:04:14,260
‫Overflow o su un sito simile.

101
00:04:14,260 --> 00:04:17,650
‫Ma cosa sono in realtà questi tipi di logica?

102
00:04:17,650 --> 00:04:20,670
‫Bene, la differenza è un po' supponente, ma questa

103
00:04:20,670 --> 00:04:22,730
‫è la mia opinione su di

104
00:04:22,730 --> 00:04:25,590
‫essa: quindi, la logica dell'applicazione è tutto il

105
00:04:25,590 --> 00:04:27,340
‫codice che si occupa

106
00:04:27,340 --> 00:04:29,120
‫solo dell'implementazione dell'applicazione e non

107
00:04:29,120 --> 00:04:31,060
‫del problema aziendale sottostante che

108
00:04:31,060 --> 00:04:33,890
‫stiamo effettivamente cercando di risolvere con l'applicazione .

109
00:04:33,890 --> 00:04:35,930
‫Come mostrare e vendere

110
00:04:35,930 --> 00:04:38,160
‫tour, gestire le scorte in un

111
00:04:38,160 --> 00:04:40,830
‫supermercato o organizzare una biblioteca, per esempio.

112
00:04:40,830 --> 00:04:42,670
‫Quindi, ancora una volta, la

113
00:04:42,670 --> 00:04:45,470
‫logica dell'applicazione è la logica che fa funzionare effettivamente l'app.

114
00:04:45,470 --> 00:04:49,100
‫Ad esempio, gran parte della logica dell'applicazione in Express

115
00:04:49,100 --> 00:04:52,490
‫riguarda la gestione di richieste e risposte.

116
00:04:52,490 --> 00:04:54,600
‫Quindi, in un certo senso, possiamo

117
00:04:54,600 --> 00:04:58,100
‫anche dire che la logica dell'applicazione riguarda più cose tecniche.

118
00:04:58,100 --> 00:05:00,490
‫Inoltre, se abbiamo viste nella nostra app, la

119
00:05:00,490 --> 00:05:02,280
‫logica dell'applicazione funge da

120
00:05:02,280 --> 00:05:04,980
‫ponte tra i livelli di modello e vista in

121
00:05:04,980 --> 00:05:06,893
‫modo da non mescolare mai la

122
00:05:06,893 --> 00:05:08,920
‫logica aziendale con la logica di presentazione.

123
00:05:08,920 --> 00:05:10,120
‫Tutto ok?

124
00:05:10,120 --> 00:05:12,000
‫Ora, riguardo alla logica

125
00:05:12,000 --> 00:05:15,370
‫aziendale, è tutto il codice che risolve effettivamente il problema

126
00:05:15,370 --> 00:05:17,490
‫aziendale che abbiamo deciso di risolvere.

127
00:05:17,490 --> 00:05:21,340
‫Diciamo ancora, che il nostro obiettivo è mostrare i tour ai

128
00:05:21,340 --> 00:05:22,920
‫clienti e poi venderli.

129
00:05:22,920 --> 00:05:26,491
‫E il codice direttamente correlato alle regole aziendali,

130
00:05:26,491 --> 00:05:28,210
‫al funzionamento dell'azienda

131
00:05:28,210 --> 00:05:31,440
‫e alle esigenze aziendali, è la logica aziendale.

132
00:05:31,440 --> 00:05:34,580
‫Ora, se questo suona ancora un po' troppo

133
00:05:34,580 --> 00:05:37,810
‫filosofico, alcuni esempi nel contesto della nostra ultima app

134
00:05:37,810 --> 00:05:41,160
‫stanno creando nuovi tour nel database dell'app, controllando se

135
00:05:41,160 --> 00:05:45,270
‫la password di un utente è corretta quando accede, convalidando i

136
00:05:45,270 --> 00:05:47,320
‫dati di input dell'utente o

137
00:05:47,320 --> 00:05:50,860
‫assicurando che solo gli utenti chi ha acquistato un determinato

138
00:05:50,860 --> 00:05:52,220
‫tour può recensirlo.

139
00:05:52,220 --> 00:05:55,490
‫Quindi tutta questa roba riguarda il business stesso, e

140
00:05:55,490 --> 00:05:58,200
‫quindi fa parte della logica del business.

141
00:05:58,200 --> 00:06:00,090
‫Ora, dobbiamo tenere presente

142
00:06:00,090 --> 00:06:02,320
‫che la logica dell'applicazione e la

143
00:06:02,320 --> 00:06:05,480
‫logica aziendale sono quasi impossibili da separare completamente e

144
00:06:05,480 --> 00:06:07,670
‫quindi a volte si sovrappongono.

145
00:06:07,670 --> 00:06:09,360
‫Ma dovremmo fare del

146
00:06:09,360 --> 00:06:12,200
‫nostro meglio per mantenere la logica applicativa nei

147
00:06:12,200 --> 00:06:15,440
‫nostri controller e la logica aziendale nei nostri modelli.

148
00:06:15,440 --> 00:06:17,260
‫E c'è anche questa filosofia

149
00:06:17,260 --> 00:06:19,400
‫dei modelli grassi, dei controller

150
00:06:19,400 --> 00:06:21,170
‫sottili, che dice

151
00:06:21,170 --> 00:06:24,140
‫che dovremmo scaricare quanta più logica possibile nei

152
00:06:24,140 --> 00:06:28,180
‫modelli, per mantenere i controller il più semplici e snelli possibile.

153
00:06:28,180 --> 00:06:31,450
‫Quindi un modello grasso avrà tutta la logica di business

154
00:06:31,450 --> 00:06:33,210
‫che possiamo scaricare su di

155
00:06:33,210 --> 00:06:36,700
‫esso, e un controller sottile avrà meno logica possibile, in

156
00:06:36,700 --> 00:06:38,210
‫modo che il controller

157
00:06:38,210 --> 00:06:41,410
‫sia davvero principalmente per gestire le richieste e le

158
00:06:41,410 --> 00:06:42,500
‫risposte dell'applicazione.

159
00:06:42,500 --> 00:06:43,440
‫Bene?

160
00:06:43,440 --> 00:06:46,060
‫Quindi, ora tieni a mente tutto questo

161
00:06:46,060 --> 00:06:49,193
‫mentre procediamo e avanziamo nella creazione delle nostre applicazioni.

