﻿1
00:00:01,570 --> 00:00:02,930
‫Instrutor: Até este

2
00:00:02,930 --> 00:00:05,960
‫ponto, acabamos de escrever nosso código sem pensar

3
00:00:05,960 --> 00:00:08,670
‫muito sobre a arquitetura de nosso aplicativo.

4
00:00:08,670 --> 00:00:11,200
‫Não era realmente importante até agora, mas agora

5
00:00:11,200 --> 00:00:14,550
‫que nosso aplicativo está realmente começando a crescer, precisamos começar

6
00:00:14,550 --> 00:00:15,770
‫a nos preocupar

7
00:00:15,770 --> 00:00:19,400
‫com a maneira como projetamos ou com a arquitetura de código.

8
00:00:19,400 --> 00:00:22,320
‫E esta palestra será apenas uma breve

9
00:00:22,320 --> 00:00:24,010
‫introdução à arquitetura back-end.

10
00:00:24,010 --> 00:00:26,893
‫Começando com a arquitetura MVC.

11
00:00:28,410 --> 00:00:30,580
‫Então, neste projeto,

12
00:00:30,580 --> 00:00:33,420
‫vamos usar uma arquitetura amplamente

13
00:00:33,420 --> 00:00:36,300
‫usada e conhecida chamada de modelo,

14
00:00:36,300 --> 00:00:38,720
‫visualização, controlador ou MVC.

15
00:00:38,720 --> 00:00:40,000
‫E existem

16
00:00:40,000 --> 00:00:42,660
‫diferentes maneiras de implementar a arquitetura MVC,

17
00:00:42,660 --> 00:00:44,530
‫algumas mais complexas do que

18
00:00:44,530 --> 00:00:45,840
‫outras, mas vamos

19
00:00:45,840 --> 00:00:48,400
‫implementá-la de uma forma muito direta aqui.

20
00:00:48,400 --> 00:00:50,080
‫Eu só queria que você

21
00:00:50,080 --> 00:00:52,140
‫soubesse que, se você pesquisar MVC no

22
00:00:52,140 --> 00:00:54,910
‫Google, você o encontrará implementado de algumas maneiras diferentes.

23
00:00:54,910 --> 00:00:57,850
‫Ok, de qualquer maneira, nesta arquitetura, a camada

24
00:00:57,850 --> 00:00:59,620
‫de modelo se preocupa com

25
00:00:59,620 --> 00:01:02,420
‫tudo sobre os dados dos aplicativos e a

26
00:01:02,420 --> 00:01:04,150
‫lógica de negócios.

27
00:01:04,150 --> 00:01:06,360
‫E aprenderemos o que a lógica de negócios significa

28
00:01:06,360 --> 00:01:07,333
‫no próximo slide.

29
00:01:08,180 --> 00:01:10,820
‫Em seguida, temos a camada de controlador

30
00:01:10,820 --> 00:01:12,850
‫e a função dos controladores

31
00:01:12,850 --> 00:01:15,380
‫é lidar com a solicitação da

32
00:01:15,380 --> 00:01:16,780
‫aplicação, interagir com

33
00:01:16,780 --> 00:01:19,500
‫os modelos e enviar respostas ao cliente.

34
00:01:19,500 --> 00:01:22,540
‫E tudo isso é chamado de lógica do aplicativo.

35
00:01:22,540 --> 00:01:24,950
‫Finalmente, a camada de visualização é

36
00:01:24,950 --> 00:01:27,880
‫necessária se tivermos uma interface gráfica em nosso aplicativo.

37
00:01:27,880 --> 00:01:30,010
‫Ou em outras palavras, se estivermos

38
00:01:30,010 --> 00:01:32,410
‫construindo um site renderizado do lado do

39
00:01:32,410 --> 00:01:34,280
‫servidor, como falamos antes.

40
00:01:34,280 --> 00:01:36,870
‫Nesse caso, a camada de visualização consiste basicamente

41
00:01:36,870 --> 00:01:38,981
‫nos templates usados para gerar

42
00:01:38,981 --> 00:01:43,060
‫a visualização, ou seja, o site que iremos enviar de volta ao cliente.

43
00:01:43,060 --> 00:01:45,690
‫E essa é a lógica de apresentação.

44
00:01:45,690 --> 00:01:48,500
‫Por enquanto, estamos apenas construindo uma API,

45
00:01:48,500 --> 00:01:51,780
‫então não estamos realmente preocupados com as visualizações ainda.

46
00:01:51,780 --> 00:01:54,180
‫Isso é um pouco mais tarde no curso.

47
00:01:54,180 --> 00:01:57,650
‫Portanto, usar um padrão ou uma arquitetura como essa nos

48
00:01:57,650 --> 00:02:00,430
‫permite escrever um aplicativo mais modular, que

49
00:02:00,430 --> 00:02:03,180
‫será muito mais fácil de manter em

50
00:02:03,180 --> 00:02:04,550
‫escala, conforme necessário.

51
00:02:04,550 --> 00:02:06,200
‫E poderíamos ir ainda mais

52
00:02:06,200 --> 00:02:08,730
‫longe e adicionar mais camadas de abstração aqui.

53
00:02:08,730 --> 00:02:11,170
‫Mas, neste tipo de aplicativo menor, a

54
00:02:11,170 --> 00:02:14,643
‫arquitetura MVC é mais do que suficiente para nossas necessidades.

55
00:02:15,520 --> 00:02:17,635
‫Agora, tudo isso pode parecer

56
00:02:17,635 --> 00:02:21,700
‫um pouco abstrato, então vamos dar uma olhada no MVC no contexto

57
00:02:21,700 --> 00:02:24,510
‫de nosso aplicativo e no ciclo de solicitação-resposta.

58
00:02:24,510 --> 00:02:28,050
‫Como sempre, tudo começa com um pedido.

59
00:02:28,050 --> 00:02:30,760
‫Essa solicitação atingirá um de nossos roteadores, porque

60
00:02:30,760 --> 00:02:33,410
‫lembre-se de que temos vários roteadores.

61
00:02:33,410 --> 00:02:35,330
‫Basicamente, um para

62
00:02:35,330 --> 00:02:38,390
‫cada recurso, como tours, usuários etc.

63
00:02:38,390 --> 00:02:41,520
‫Agora, o objetivo do roteador é delegar a

64
00:02:41,520 --> 00:02:43,360
‫solicitação à função de

65
00:02:43,360 --> 00:02:46,310
‫manipulador correta, que estará em um dos controladores.

66
00:02:46,310 --> 00:02:48,420
‫E, novamente, haverá um controlador

67
00:02:48,420 --> 00:02:50,320
‫para cada um de

68
00:02:50,320 --> 00:02:54,530
‫nossos recursos, para manter essas diferentes partes do aplicativo bem separadas.

69
00:02:54,530 --> 00:02:57,090
‫Então, dependendo da solicitação recebida, o controlador

70
00:02:57,090 --> 00:02:59,360
‫pode precisar interagir com um dos

71
00:02:59,360 --> 00:03:01,010
‫modelos, por exemplo, para

72
00:03:01,010 --> 00:03:02,330
‫recuperar um

73
00:03:02,330 --> 00:03:04,460
‫determinado documento do banco de dados

74
00:03:04,460 --> 00:03:06,490
‫ou para criar um novo.

75
00:03:06,490 --> 00:03:10,350
‫Mais uma vez, existe um arquivo de modelo para cada recurso.

76
00:03:10,350 --> 00:03:12,560
‫Depois de obter os dados do

77
00:03:12,560 --> 00:03:15,760
‫modelo, o controlador pode estar pronto para enviar de

78
00:03:15,760 --> 00:03:19,320
‫volta uma resposta ao cliente, por exemplo, contendo esses dados.

79
00:03:19,320 --> 00:03:22,240
‫Agora, caso desejemos realmente renderizar um site, há

80
00:03:22,240 --> 00:03:24,100
‫mais uma etapa envolvida.

81
00:03:24,100 --> 00:03:26,950
‫Nesse caso, depois de obter os dados do

82
00:03:26,950 --> 00:03:28,490
‫modelo, o controlador

83
00:03:28,490 --> 00:03:32,200
‫selecionará um dos modelos de visualização e injetará os dados nele.

84
00:03:32,200 --> 00:03:34,900
‫Esse site renderizado será então enviado de

85
00:03:34,900 --> 00:03:36,670
‫volta como resposta.

86
00:03:36,670 --> 00:03:38,860
‫Na camada de visualização em um

87
00:03:38,860 --> 00:03:41,990
‫aplicativo Express, geralmente há um modelo de visualização para cada página.

88
00:03:41,990 --> 00:03:43,760
‫Como uma página de visão geral do

89
00:03:43,760 --> 00:03:46,580
‫tour, uma página de detalhes do tour ou uma página de login.

90
00:03:46,580 --> 00:03:49,470
‫No exemplo de nosso aplicativo mais recente, é claro.

91
00:03:49,470 --> 00:03:52,630
‫Então, essa é uma visão ampla da arquitetura

92
00:03:52,630 --> 00:03:54,930
‫que vamos implementar neste projeto.

93
00:03:55,940 --> 00:03:58,050
‫Agora, para terminar, deixe-me entrar

94
00:03:58,050 --> 00:04:01,320
‫em mais detalhes sobre o modelo e o controlador.

95
00:04:01,320 --> 00:04:04,110
‫Portanto, um dos grandes objetivos do MVC é

96
00:04:04,110 --> 00:04:05,970
‫separar a lógica de

97
00:04:05,970 --> 00:04:08,010
‫negócios da lógica do aplicativo.

98
00:04:08,010 --> 00:04:10,590
‫Você ouvirá sobre esses tipos de lógica o tempo

99
00:04:10,590 --> 00:04:12,420
‫todo quando navegar no Stack

100
00:04:12,420 --> 00:04:14,260
‫Overflow ou em algum site parecido.

101
00:04:14,260 --> 00:04:17,650
‫Mas quais são esses tipos de lógica na verdade?

102
00:04:17,650 --> 00:04:20,670
‫Bem, a diferença é um pouco opinativa, mas esta

103
00:04:20,670 --> 00:04:22,730
‫é minha opinião sobre isso: então,

104
00:04:22,730 --> 00:04:25,590
‫a lógica do aplicativo é todo o código que

105
00:04:25,590 --> 00:04:27,340
‫se preocupa apenas com

106
00:04:27,340 --> 00:04:29,120
‫a implementação do aplicativo e

107
00:04:29,120 --> 00:04:31,060
‫não com o problema de negócios

108
00:04:31,060 --> 00:04:33,890
‫subjacente que estamos tentando resolver com o aplicativo .

109
00:04:33,890 --> 00:04:35,930
‫Como mostrar e vender

110
00:04:35,930 --> 00:04:38,160
‫tours, administrar estoque em um

111
00:04:38,160 --> 00:04:40,830
‫supermercado ou organizar uma biblioteca, por exemplo.

112
00:04:40,830 --> 00:04:42,670
‫Portanto, novamente, a lógica do

113
00:04:42,670 --> 00:04:45,470
‫aplicativo é a lógica que faz o aplicativo realmente funcionar.

114
00:04:45,470 --> 00:04:49,100
‫Por exemplo, uma grande parte da lógica do aplicativo no

115
00:04:49,100 --> 00:04:52,490
‫Express envolve o gerenciamento de solicitações e respostas.

116
00:04:52,490 --> 00:04:54,600
‫Então, de certa forma, também podemos

117
00:04:54,600 --> 00:04:58,100
‫dizer que a lógica do aplicativo é mais sobre coisas técnicas.

118
00:04:58,100 --> 00:05:00,490
‫Além disso, se tivermos visualizações em nosso aplicativo,

119
00:05:00,490 --> 00:05:02,280
‫a lógica do aplicativo servirá

120
00:05:02,280 --> 00:05:04,980
‫como uma ponte entre o modelo e as camadas de

121
00:05:04,980 --> 00:05:06,893
‫visualização, para que nunca misturemos a lógica

122
00:05:06,893 --> 00:05:08,920
‫de negócios com a lógica de apresentação.

123
00:05:08,920 --> 00:05:10,120
‫Tudo bem?

124
00:05:10,120 --> 00:05:12,000
‫Agora, sobre a lógica

125
00:05:12,000 --> 00:05:15,370
‫de negócios, é todo o código que realmente resolve o

126
00:05:15,370 --> 00:05:17,490
‫problema de negócios que pretendemos resolver.

127
00:05:17,490 --> 00:05:21,340
‫Digamos novamente que nosso objetivo é mostrar passeios aos clientes

128
00:05:21,340 --> 00:05:22,920
‫e depois vendê-los.

129
00:05:22,920 --> 00:05:26,491
‫E o código que está diretamente relacionado às regras de negócios, ao

130
00:05:26,491 --> 00:05:28,210
‫modo como o negócio funciona

131
00:05:28,210 --> 00:05:31,440
‫e às necessidades do negócio, é a lógica do negócio.

132
00:05:31,440 --> 00:05:34,580
‫Agora, se isso ainda parece um pouco filosófico demais,

133
00:05:34,580 --> 00:05:37,810
‫alguns exemplos no contexto de nosso aplicativo mais recente

134
00:05:37,810 --> 00:05:41,160
‫estão criando novos passeios no banco de dados do aplicativo,

135
00:05:41,160 --> 00:05:45,270
‫verificando se a senha de um usuário está correta quando ele faz login,

136
00:05:45,270 --> 00:05:47,320
‫validando os dados de entrada do

137
00:05:47,320 --> 00:05:50,860
‫usuário ou garantindo que apenas os usuários quem comprou um determinado

138
00:05:50,860 --> 00:05:52,220
‫passeio pode avaliá-lo.

139
00:05:52,220 --> 00:05:55,490
‫Portanto, tudo isso está relacionado ao próprio negócio e,

140
00:05:55,490 --> 00:05:58,200
‫portanto, faz parte da lógica do negócio.

141
00:05:58,200 --> 00:06:00,090
‫Agora, precisamos ter em mente

142
00:06:00,090 --> 00:06:02,320
‫que a lógica do aplicativo e a

143
00:06:02,320 --> 00:06:05,480
‫lógica do negócio são quase impossíveis de separar completamente e,

144
00:06:05,480 --> 00:06:07,670
‫portanto, às vezes elas se sobrepõem.

145
00:06:07,670 --> 00:06:09,360
‫Mas devemos nos esforçar

146
00:06:09,360 --> 00:06:12,200
‫ao máximo para manter a lógica do aplicativo em

147
00:06:12,200 --> 00:06:15,440
‫nossos controladores e a lógica de negócios em nossos modelos.

148
00:06:15,440 --> 00:06:17,260
‫E há até mesmo essa

149
00:06:17,260 --> 00:06:19,400
‫filosofia de modelos gordos, controladores finos,

150
00:06:19,400 --> 00:06:21,170
‫que diz que

151
00:06:21,170 --> 00:06:24,140
‫devemos descarregar o máximo de lógica possível nos

152
00:06:24,140 --> 00:06:28,180
‫modelos, para manter os controladores o mais simples e enxutos possíveis.

153
00:06:28,180 --> 00:06:31,450
‫Portanto, um modelo gordo terá tanta lógica de negócios

154
00:06:31,450 --> 00:06:33,210
‫quanto pudermos descarregar para ele,

155
00:06:33,210 --> 00:06:36,700
‫e um controlador fino terá o mínimo de lógica possível,

156
00:06:36,700 --> 00:06:38,210
‫de forma que o

157
00:06:38,210 --> 00:06:41,410
‫controlador seja principalmente para gerenciar as solicitações e respostas

158
00:06:41,410 --> 00:06:42,500
‫do aplicativo.

159
00:06:42,500 --> 00:06:43,440
‫OK?

160
00:06:43,440 --> 00:06:46,060
‫Portanto, agora mantenha tudo isso em mente à

161
00:06:46,060 --> 00:06:49,193
‫medida que avançamos e progredimos na construção de nossos aplicativos.

