WEBVTT

1
00:01.010 --> 00:02.030
Bentornati.

2
00:02.030 --> 00:03.680
Tutto funziona bene.

3
00:03.680 --> 00:07.130
Ma c'è un grosso problema.

4
00:07.130 --> 00:11.360
Abbiamo un repository all'interno del
costruttore del ViewModel.

5
00:11.360 --> 00:20.270
Questo è un grosso problema, perché i
Viewmodel non possono essere

6
00:20.270 --> 00:22.610
istanziati direttamente da qualsiasi
classe o attività se accettano parametri.

7
00:22.610 --> 00:26.750
Per risolvere questo problema, dobbiamo
creare un factory ViewModel.

8
00:26.780 --> 00:29.330
Andare allo stesso pacchetto del
ViewModel.

9
00:29.330 --> 00:35.000
Creare una nuova classe Kotlin chiamata
movie ViewModel factory.

10
00:35.000 --> 00:43.310
Se il ViewModel richiede parametri
aggiuntivi, come un repository o un
contesto,

11
00:43.310 --> 00:47.600
è necessario creare un factory di
ViewModel provider per gestire
l'istanziazione.

12
00:47.600 --> 00:56.360
Quindi dobbiamo passare lo stesso
parametro che il ViewModel

13
00:56.360 --> 00:58.280
accetta all'interno del costruttore del
factory private val repository.

14
00:58.280 --> 01:08.250
È di tipo repository e questa classe
factory sarà un factory

15
01:08.280 --> 01:09.870
se la estendo da un provider di ViewModel
dot factory.

16
01:09.870 --> 01:13.410
Devo sovrascrivere una funzione chiamata
create.

17
01:13.410 --> 01:21.810
Quindi la prima è una funzione di
creazione che accetta una classe modale di
tipo T di tipo generico.

18
01:21.840 --> 01:28.470
Non preoccupatevi, non vi addentrerete in
questi codici perché fungono da modello.

19
01:28.470 --> 01:32.820
Vengono utilizzati per creare un'istanza
del ViewModel.

20
01:32.820 --> 01:41.160
Dobbiamo impostare la classe modale e
verificare se è assegnabile dalla classe
ViewModel del film a Java.

21
01:41.160 --> 01:44.820
Dobbiamo restituire il filmato ViewModel.

22
01:44.820 --> 01:53.670
Passare il repository come T, altrimenti
dobbiamo lanciare l'eccezione di argomento
illegale della classe modale.

23
01:53.670 --> 01:58.260
Questa classe del ViewModel che il factory
deve creare.

24
01:58.260 --> 02:04.650
Viene passato come argomento al metodo
create ed è assegnabile da questo metodo.

25
02:04.650 --> 02:13.290
Verifica se la classe modale è uguale alla
classe ViewModel del film, dot Java, o una
sua superclasse.

26
02:13.290 --> 02:20.100
Questo assicura che il ViewModel del
filmato possa essere lanciato in modo
sicuro al tipo di classe modale.

27
02:20.100 --> 02:26.520
Qui abbiamo un calco non controllato
Alt+invio per aggiungere un calco non
controllato.

28
02:26.520 --> 02:35.160
Per questa affermazione, fare clic su
invio e si può notare che questa

29
02:35.160 --> 02:38.040
annotazione sopprime l'avviso di cast non
selezionato che il compilatore Kotlin
genererà.

30
02:38.040 --> 02:46.080
Quindi il cast dal film ViewModel a T, il
tipo generico del ViewModel non

31
02:46.080 --> 02:49.470
è controllato, il che significa che il
compilatore non può garantirne la
sicurezza.

32
02:49.470 --> 02:57.990
Utilizzando questa annotazione, si
riconosce il rischio potenziale e si

33
02:58.020 --> 03:01.020
sopprime l'avviso Ritorno del repository
del filmato ViewModel come T.

34
03:01.050 --> 03:07.920
Si crea una nuova istanza di View Movie
ViewModel, passando

35
03:07.920 --> 03:09.750
il repository come parametro al suo
costruttore e come D.

36
03:09.750 --> 03:13.500
Questo calco l'istanza di ViewModel del
filmato a T.

37
03:13.530 --> 03:22.600
Ci si aspetta che il metodo create del
factory restituisca un'istanza di tipo T,
quindi questo

38
03:22.600 --> 03:31.570
cast è necessario quando viene chiamato il
metodo create del factory ViewModel di
questo film, che

39
03:31.570 --> 03:35.200
riceve un parametro della classe model che
indica il tipo di ViewModel da creare nel
codice.

40
03:35.200 --> 03:42.970
Controlla se la classe del modello è
assegnabile dal ViewModel del film, cioè
verifica se

41
03:42.970 --> 03:46.960
è possibile creare un'istanza del
ViewModel del film per la classe del
modello data.

42
03:46.960 --> 03:55.660
Se il controllo passa, crea una nuova
istanza del film ViewModel usando

43
03:55.660 --> 03:59.440
il repository fornito e lo restituisce,
lanciandolo al tipo T previsto.

44
03:59.470 --> 04:07.180
Questo cast è necessario perché create è
un metodo

45
04:07.210 --> 04:07.870
generico e deve restituire un'istanza del
tipo richiesto.

46
04:07.870 --> 04:16.120
Questo pattern è essenziale nei casi in
cui i modelli di vista richiedono
dipendenze che devono essere

47
04:16.120 --> 04:22.630
fornite in fase di esecuzione, garantendo
una separazione pulita delle
preoccupazioni e una corretta iniezione
delle dipendenze.


