﻿1
00:00:01,210 --> 00:00:02,660
‫Istruttore: Finora in

2
00:00:02,660 --> 00:00:04,860
‫questa sezione abbiamo parlato dei

3
00:00:04,860 --> 00:00:06,940
‫modelli Mongoose, delle operazioni CRUD

4
00:00:06,940 --> 00:00:09,660
‫con Mongoose, abbiamo fatto molte query e

5
00:00:09,660 --> 00:00:12,820
‫abbiamo appreso della pipeline di aggregazione, ma ora

6
00:00:12,820 --> 00:00:15,110
‫per i prossimi due video, torniamo

7
00:00:15,110 --> 00:00:18,860
‫ai nostri dati modella e impara alcune funzioni super utili

8
00:00:18,860 --> 00:00:22,170
‫che Mongoose ci offre per modellare i nostri dati.

9
00:00:22,170 --> 00:00:24,090
‫E il primo di cui parleremo

10
00:00:24,090 --> 00:00:25,773
‫sono le proprietà virtuali.

11
00:00:27,410 --> 00:00:29,973
‫E quindi apriamo qui il nostro modello di tour.

12
00:00:31,050 --> 00:00:35,080
‫Bene, ora le proprietà virtuali sono fondamentalmente campi che possiamo

13
00:00:35,080 --> 00:00:37,030
‫definire sul nostro schema

14
00:00:37,030 --> 00:00:39,150
‫ma che non verranno mantenuti.

15
00:00:39,150 --> 00:00:42,100
‫Quindi non verranno salvati nel database

16
00:00:42,100 --> 00:00:44,720
‫per risparmiare spazio lì.

17
00:00:44,720 --> 00:00:46,140
‫E la maggior parte

18
00:00:46,140 --> 00:00:49,260
‫delle volte, ovviamente, vogliamo davvero salvare i nostri dati

19
00:00:49,260 --> 00:00:51,700
‫nel database, ma le proprietà virtuali hanno

20
00:00:51,700 --> 00:00:55,090
‫molto senso per i campi che possono essere derivati l'uno dall'altro.

21
00:00:55,090 --> 00:00:58,410
‫Ad esempio una conversione da miglia a chilometri,

22
00:00:58,410 --> 00:01:00,720
‫non ha senso memorizzare questi

23
00:01:00,720 --> 00:01:03,260
‫due campi in un database se

24
00:01:03,260 --> 00:01:05,750
‫possiamo facilmente convertirne uno nell'altro, giusto?

25
00:01:05,750 --> 00:01:09,140
‫Ok, ora definiamo una proprietà virtuale che contenga la

26
00:01:09,140 --> 00:01:11,680
‫durata del tour in settimane.

27
00:01:11,680 --> 00:01:13,800
‫E quindi questo è fondamentalmente

28
00:01:13,800 --> 00:01:16,460
‫un campo che possiamo convertire molto facilmente dalla

29
00:01:16,460 --> 00:01:18,970
‫durata che abbiamo già in giorni, giusto?

30
00:01:18,970 --> 00:01:20,523
‫E quindi ecco come funziona.

31
00:01:22,160 --> 00:01:25,640
‫Definiamo quelle proprietà virtuali sullo schema del

32
00:01:25,640 --> 00:01:30,640
‫tour e quindi diciamo tourSchema. virtual e poi il nome della

33
00:01:33,430 --> 00:01:34,763
‫proprietà virtuale.

34
00:01:36,530 --> 00:01:39,300
‫Quindi chiamiamola durata settimane, e

35
00:01:39,300 --> 00:01:42,950
‫poi lì dobbiamo definire il metodo get.

36
00:01:42,950 --> 00:01:45,600
‫Ed è solo perché questa proprietà virtuale

37
00:01:45,600 --> 00:01:47,580
‫qui verrà praticamente creata

38
00:01:47,580 --> 00:01:50,560
‫ogni volta che estraiamo dei dati dal database.

39
00:01:50,560 --> 00:01:54,273
‫E quindi questa funzione get qui è chiamata getter.

40
00:01:54,273 --> 00:01:57,090
‫Ora qui passiamo una funzione, e in

41
00:01:57,090 --> 00:01:58,400
‫realtà questa funzione

42
00:01:58,400 --> 00:02:02,460
‫di richiamata sarà una funzione reale, quindi non una funzione

43
00:02:02,460 --> 00:02:05,672
‫freccia, e ti spiegherò perché in un secondo.

44
00:02:05,672 --> 00:02:08,500
‫Ora come definiamo sostanzialmente

45
00:02:08,500 --> 00:02:10,810
‫la proprietà virtuale?

46
00:02:10,810 --> 00:02:13,420
‫Beh, è molto semplice, tutto quello che dobbiamo

47
00:02:13,420 --> 00:02:18,280
‫dire è che vogliamo restituire questo, . durata in questo caso, divisa

48
00:02:18,280 --> 00:02:19,833
‫per sette.

49
00:02:21,020 --> 00:02:24,350
‫Ecco come calcoliamo la durata in settimane, quindi la durata

50
00:02:24,350 --> 00:02:26,730
‫in giorni divisa per sette perché ci sono

51
00:02:26,730 --> 00:02:29,110
‫sette giorni nella settimana, e quindi questa

52
00:02:29,110 --> 00:02:31,030
‫è la durata in settimane.

53
00:02:31,030 --> 00:02:33,510
‫Ad esempio, se un tour ha sette

54
00:02:33,510 --> 00:02:35,730
‫giorni, sarà ovviamente una settimana.

55
00:02:35,730 --> 00:02:38,360
‫Ora ho usato questa funzione normale qui perché

56
00:02:38,360 --> 00:02:41,250
‫ricorda, una funzione freccia non ottiene la propria

57
00:02:41,250 --> 00:02:43,060
‫parola chiave del disco.

58
00:02:43,060 --> 00:02:45,800
‫Qui abbiamo effettivamente bisogno della parola chiave

59
00:02:45,800 --> 00:02:48,470
‫disk perché la parola chiave

60
00:02:48,470 --> 00:02:51,588
‫disk in questo caso punterà al documento corrente.

61
00:02:51,588 --> 00:02:54,640
‫E quindi di solito quando

62
00:02:54,640 --> 00:02:58,714
‫vogliamo usarlo, dovremmo sempre usare una funzione normale.

63
00:02:58,714 --> 00:03:01,140
‫Quindi, ovunque a Mongoose, userò

64
00:03:01,140 --> 00:03:04,340
‫sempre queste funzioni regolari a cui

65
00:03:04,340 --> 00:03:06,061
‫siamo abituati.

66
00:03:06,061 --> 00:03:11,061
‫Quindi salvalo qui, ed è proprio così.

67
00:03:11,070 --> 00:03:13,180
‫È così che definiamo le

68
00:03:13,180 --> 00:03:15,660
‫settimane di durata, che non verranno mantenute nel

69
00:03:15,660 --> 00:03:19,150
‫database, ma saranno presenti solo non appena avremo i dati.

70
00:03:19,150 --> 00:03:21,820
‫In questo momento in realtà non

71
00:03:21,820 --> 00:03:24,610
‫sarà ancora lì, perché qui manca un

72
00:03:24,610 --> 00:03:27,243
‫pezzo, quindi lasciatemi iniziare mostrandovelo.

73
00:03:28,760 --> 00:03:31,240
‫Quindi, se proviamo a ottenere tutti i tour,

74
00:03:31,240 --> 00:03:34,050
‫vedrai che le settimane di durata non si trovano

75
00:03:34,050 --> 00:03:35,768
‫da nessuna parte qui.

76
00:03:35,768 --> 00:03:38,660
‫E questo perché abbiamo bisogno di definire esplicitamente

77
00:03:38,660 --> 00:03:41,740
‫nel nostro schema che vogliamo le proprietà virtuali nel

78
00:03:41,740 --> 00:03:42,683
‫nostro output.

79
00:03:43,758 --> 00:03:48,758
‫E quindi ricorda come l'ho detto a questa Mangusta. schema, possiamo passare non solo

80
00:03:49,320 --> 00:03:51,650
‫l'oggetto con la definizione

81
00:03:51,650 --> 00:03:54,050
‫dello schema stesso, ma anche

82
00:03:54,050 --> 00:03:56,943
‫un oggetto per le opzioni dello schema.

83
00:03:58,070 --> 00:04:00,579
‫E quindi aggiungiamolo qui alla fine,

84
00:04:00,579 --> 00:04:04,810
‫quindi questo primo oggetto qui è la definizione dello schema e

85
00:04:04,810 --> 00:04:07,630
‫ora il secondo oggetto per le opzioni.

86
00:04:07,630 --> 00:04:11,260
‫E ciò che dobbiamo specificare qui sono le due proprietà

87
00:04:12,390 --> 00:04:15,410
‫JSON qui, e ciò che diciamo è che

88
00:04:15,410 --> 00:04:19,453
‫ogni volta che i dati vengono effettivamente emessi come JSON, vogliamo

89
00:04:20,480 --> 00:04:22,710
‫che i virtual siano veri.

90
00:04:23,681 --> 00:04:26,657
‫Quindi fondamentalmente i virtuali fanno parte dell'output.

91
00:04:27,800 --> 00:04:30,000
‫E ora sto duplicando questo perché

92
00:04:30,000 --> 00:04:31,923
‫vogliamo anche dire di obiettare.

93
00:04:33,370 --> 00:04:36,037
‫Quindi, in pratica, quando i dati vengono

94
00:04:36,037 --> 00:04:37,320
‫emessi come oggetto.

95
00:04:37,320 --> 00:04:40,010
‫Quindi, se ora torniamo qui, dovremmo essere in grado

96
00:04:40,010 --> 00:04:41,993
‫di vedere le settimane di durata.

97
00:04:43,120 --> 00:04:46,550
‫Aspettiamolo, e infatti, eccolo qui.

98
00:04:46,550 --> 00:04:51,053
‫Quindi sono cinque giorni e quindi è 0. 71 settimane.

99
00:04:52,250 --> 00:04:55,800
‫Qui abbiamo sette giorni, quindi è una settimana.

100
00:04:55,800 --> 00:04:59,810
‫Ok, quindi funziona davvero, fantastico.

101
00:04:59,810 --> 00:05:01,680
‫Ora una cosa che

102
00:05:01,680 --> 00:05:04,840
‫dobbiamo tenere a mente è che non possiamo usare

103
00:05:04,840 --> 00:05:07,840
‫questa proprietà virtuale qui in una query, perché

104
00:05:07,840 --> 00:05:09,980
‫tecnicamente non fanno parte del database.

105
00:05:09,980 --> 00:05:11,370
‫Quindi non

106
00:05:11,370 --> 00:05:16,370
‫possiamo dire, ad esempio, tour. trova dove la durata delle settimane è uguale a uno.

107
00:05:16,618 --> 00:05:19,660
‫Non funzionerà, di nuovo perché questa proprietà

108
00:05:19,660 --> 00:05:22,520
‫non fa parte del database.

109
00:05:22,520 --> 00:05:25,330
‫Ora, ovviamente, avremmo anche potuto eseguire questa conversione

110
00:05:25,330 --> 00:05:28,450
‫ogni volta che abbiamo interrogato i dati, ad esempio,

111
00:05:28,450 --> 00:05:30,890
‫come in un controller, ma

112
00:05:30,890 --> 00:05:34,240
‫non sarebbe la migliore pratica semplicemente perché vogliamo cercare

113
00:05:34,240 --> 00:05:36,960
‫di mantenere la logica aziendale e la

114
00:05:36,960 --> 00:05:39,830
‫logica dell'applicazione il più separate possibile possibile, ricordi?

115
00:05:39,830 --> 00:05:42,980
‫Quindi c'era tutto quel discorso sui modelli grassi

116
00:05:42,980 --> 00:05:46,950
‫e sui controller sottili di cui abbiamo parlato prima, che dice

117
00:05:46,950 --> 00:05:48,850
‫che dovremmo avere modelli

118
00:05:48,850 --> 00:05:52,390
‫con quanta più logica di business possiamo scaricare su di

119
00:05:52,390 --> 00:05:54,460
‫loro e controller sottili con

120
00:05:54,460 --> 00:05:56,598
‫la minima logica di business possibile.

121
00:05:56,598 --> 00:05:59,840
‫E quindi proprietà virtuali come questa sono in realtà un

122
00:05:59,840 --> 00:06:01,970
‫buon esempio di come possiamo ottenere

123
00:06:01,970 --> 00:06:03,483
‫quel tipo di architettura.

124
00:06:04,410 --> 00:06:06,460
‫Quindi conoscere la durata in settimane

125
00:06:06,460 --> 00:06:09,070
‫è una logica aziendale perché ha a che

126
00:06:09,070 --> 00:06:11,900
‫fare con l'attività stessa, non con cose come richieste

127
00:06:11,900 --> 00:06:14,550
‫o risposte, quindi facciamo il calcolo proprio nel

128
00:06:14,550 --> 00:06:16,460
‫modello a cui appartiene e

129
00:06:16,460 --> 00:06:17,863
‫non nel controller.

