Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
00:00:01,569 --> 00:00:02,930
Up until this point,
2
00:00:02,930 --> 00:00:05,960
we have just written our code without thinking much
3
00:00:05,960 --> 00:00:08,670
about our application architecture.
4
00:00:08,670 --> 00:00:11,200
It wasn't really important until now,
5
00:00:11,200 --> 00:00:14,550
but now that our app is really starting to grow,
6
00:00:14,550 --> 00:00:15,770
we need to start worrying
7
00:00:15,770 --> 00:00:19,400
about the way that we design, or code architecture.
8
00:00:19,400 --> 00:00:22,320
And this lecture will just be a brief introduction
9
00:00:22,320 --> 00:00:24,010
to back-end architecture.
10
00:00:24,010 --> 00:00:26,893
Starting with the MVC architecture.
11
00:00:28,410 --> 00:00:30,580
So, in this project, we're going to use
12
00:00:30,580 --> 00:00:33,420
a widely used and well known architecture
13
00:00:33,420 --> 00:00:36,300
called the model, view, controller
14
00:00:36,300 --> 00:00:38,720
or MVC for short.
15
00:00:38,720 --> 00:00:40,000
And there are different ways
16
00:00:40,000 --> 00:00:42,660
of implementing the MVC architecture,
17
00:00:42,660 --> 00:00:44,530
some more complex than others,
18
00:00:44,530 --> 00:00:45,840
but we're going to implement it
19
00:00:45,840 --> 00:00:48,400
in a very straightforward way here.
20
00:00:48,400 --> 00:00:50,080
I just wanted to let you know that
21
00:00:50,080 --> 00:00:52,140
if you Google around for MVC,
22
00:00:52,140 --> 00:00:54,910
you'll find it implemented in some different ways.
23
00:00:54,910 --> 00:00:57,850
Okay, anyway, in this architecture,
24
00:00:57,850 --> 00:00:59,620
the model layer is concerned
25
00:00:59,620 --> 00:01:02,420
with everything about applications data,
26
00:01:02,420 --> 00:01:04,150
and the business logic.
27
00:01:04,150 --> 00:01:06,360
And we're going to learn what business logic means
28
00:01:06,360 --> 00:01:07,333
in the next slide.
29
00:01:08,180 --> 00:01:10,820
Next up, we have the controller layer
30
00:01:10,820 --> 00:01:12,850
and the function of the controllers
31
00:01:12,850 --> 00:01:15,380
is to handle the application's request,
32
00:01:15,380 --> 00:01:16,780
interact with models,
33
00:01:16,780 --> 00:01:19,500
and send back responses to the client.
34
00:01:19,500 --> 00:01:22,540
And all that is called the application logic.
35
00:01:22,540 --> 00:01:24,950
Finally, the view layer is necessary
36
00:01:24,950 --> 00:01:27,880
if we have a graphical interface in our app.
37
00:01:27,880 --> 00:01:30,010
Or in other words, if we're building
38
00:01:30,010 --> 00:01:32,410
a server-side rendered website,
39
00:01:32,410 --> 00:01:34,280
as we talked about before.
40
00:01:34,280 --> 00:01:36,870
In this case, the view layer consists basically
41
00:01:36,870 --> 00:01:38,981
of the templates used to generate the view,
42
00:01:38,981 --> 00:01:43,060
so the website that we're going to send back to the client.
43
00:01:43,060 --> 00:01:45,690
And that is the presentation logic.
44
00:01:45,690 --> 00:01:48,500
For now, we're just building an API though,
45
00:01:48,500 --> 00:01:51,780
so we're not really concerned about views just yet.
46
00:01:51,780 --> 00:01:54,180
That's for a bit later in the course.
47
00:01:54,180 --> 00:01:57,650
So using a pattern, or an architecture like this
48
00:01:57,650 --> 00:02:00,430
allows us to write a more modular application,
49
00:02:00,430 --> 00:02:03,180
which is going to be way easier to maintain in scale,
50
00:02:03,180 --> 00:02:04,550
as necessary.
51
00:02:04,550 --> 00:02:06,200
And we could take it even further,
52
00:02:06,200 --> 00:02:08,729
and add more layers of abstraction here.
53
00:02:08,729 --> 00:02:11,170
But in this kind of smaller application,
54
00:02:11,170 --> 00:02:14,643
the MVC architecture is more than enough for our needs.
55
00:02:15,520 --> 00:02:17,635
Now, all this may sound a bit abstract,
56
00:02:17,635 --> 00:02:21,700
so let's take a look at MVC in the context of our app,
57
00:02:21,700 --> 00:02:24,510
and the request-response cycle.
58
00:02:24,510 --> 00:02:28,050
So as always, it all starts with a request.
59
00:02:28,050 --> 00:02:30,760
That request will hit one of our routers,
60
00:02:30,760 --> 00:02:33,410
because remember, we have multiple routers.
61
00:02:33,410 --> 00:02:35,330
Basically, one for each resource,
62
00:02:35,330 --> 00:02:38,390
like tours, users, et cetera.
63
00:02:38,390 --> 00:02:41,520
Now the goal of the router is to delegate the request
64
00:02:41,520 --> 00:02:43,360
to the correct handler function,
65
00:02:43,360 --> 00:02:46,310
which will be in one of the controllers.
66
00:02:46,310 --> 00:02:48,420
And again, there will be one controller
67
00:02:48,420 --> 00:02:50,320
for each of our resources,
68
00:02:50,320 --> 00:02:54,530
to keep these different parts of the app nicely separated.
69
00:02:54,530 --> 00:02:57,090
Then, depending on the incoming request,
70
00:02:57,090 --> 00:02:59,360
the controller might need to interact
71
00:02:59,360 --> 00:03:01,010
with one of the models,
72
00:03:01,010 --> 00:03:02,330
for example to retrieve
73
00:03:02,330 --> 00:03:04,460
a certain document from the database,
74
00:03:04,460 --> 00:03:06,490
or to create a new one.
75
00:03:06,490 --> 00:03:10,350
Once more, there is one model file for each resource.
76
00:03:10,350 --> 00:03:12,560
After getting the data from the model,
77
00:03:12,560 --> 00:03:15,760
the controller might then be ready to send back a response
78
00:03:15,760 --> 00:03:19,320
to the client, for example, containing that data.
79
00:03:19,320 --> 00:03:22,240
Now, in case we want to actually render a website,
80
00:03:22,240 --> 00:03:24,100
there is one more step involved.
81
00:03:24,100 --> 00:03:26,950
In this case, after getting the data from the model,
82
00:03:26,950 --> 00:03:28,490
the controller will then select
83
00:03:28,490 --> 00:03:32,200
one of the view templates and inject the data into it.
84
00:03:32,200 --> 00:03:34,900
That rendered website will then be sent back
85
00:03:34,900 --> 00:03:36,670
as the response.
86
00:03:36,670 --> 00:03:38,860
In the view layer in an Express app
87
00:03:38,860 --> 00:03:41,990
there is usually one view template for each page.
88
00:03:41,990 --> 00:03:43,760
Like a tour overview page,
89
00:03:43,760 --> 00:03:46,580
a tour detail page, or a login page.
90
00:03:46,580 --> 00:03:49,470
In the example of our latest app of course.
91
00:03:49,470 --> 00:03:52,630
So, that is a broad overview of the architecture
92
00:03:52,630 --> 00:03:54,930
that we're going to implement in this project.
93
00:03:55,940 --> 00:03:58,050
Now to finish, let me just go into
94
00:03:58,050 --> 00:04:01,320
a bit more detail on model and controller.
95
00:04:01,320 --> 00:04:04,110
So, one of the big goals of MVC
96
00:04:04,110 --> 00:04:05,970
is to separate business logic
97
00:04:05,970 --> 00:04:08,010
from application logic.
98
00:04:08,010 --> 00:04:10,590
You'll hear about these types of logic all the time
99
00:04:10,590 --> 00:04:12,420
when you browse Stack Overflow,
100
00:04:12,420 --> 00:04:14,260
or some site like that.
101
00:04:14,260 --> 00:04:17,649
But what are these types of logic actually?
102
00:04:17,649 --> 00:04:20,670
Well, the difference is a bit opinionated,
103
00:04:20,670 --> 00:04:22,730
but this is my take on it:
104
00:04:22,730 --> 00:04:25,590
So, application logic is all the code
105
00:04:25,590 --> 00:04:27,340
that is only concerned about
106
00:04:27,340 --> 00:04:29,120
the application's implementation
107
00:04:29,120 --> 00:04:31,060
and not the underlying business problem
108
00:04:31,060 --> 00:04:33,890
that we're actually trying to solve with the application.
109
00:04:33,890 --> 00:04:35,930
Like showing and selling tours,
110
00:04:35,930 --> 00:04:38,160
managing stock in a supermarket,
111
00:04:38,160 --> 00:04:40,830
or organizing a library, for example.
112
00:04:40,830 --> 00:04:42,670
So again, application logic
113
00:04:42,670 --> 00:04:45,470
is the logic that makes the app actually work.
114
00:04:45,470 --> 00:04:49,100
For example, a big part of application logic in Express,
115
00:04:49,100 --> 00:04:52,490
is all about managing requests and responses.
116
00:04:52,490 --> 00:04:54,600
So, in a sense, we can also say
117
00:04:54,600 --> 00:04:58,100
that application logic is more about technical stuff.
118
00:04:58,100 --> 00:05:00,490
Also, if we have views in our app,
119
00:05:00,490 --> 00:05:02,280
the application logic serves
120
00:05:02,280 --> 00:05:04,980
as a bridge between model and view layers
121
00:05:04,980 --> 00:05:06,893
So that we never mix business logic
122
00:05:06,893 --> 00:05:08,920
with presentation logic.
123
00:05:08,920 --> 00:05:10,120
All right?
124
00:05:10,120 --> 00:05:12,000
Now, about business logic,
125
00:05:12,000 --> 00:05:15,370
it's all the code that actually solves the business problem
126
00:05:15,370 --> 00:05:17,490
that we set out to solve.
127
00:05:17,490 --> 00:05:21,340
Let's say again, that our goal is to show tours to customers
128
00:05:21,340 --> 00:05:22,920
and then sell them.
129
00:05:22,920 --> 00:05:26,491
And the code that is directly related to the business rules,
130
00:05:26,491 --> 00:05:28,210
to how the business works,
131
00:05:28,210 --> 00:05:31,440
and the business needs, is business logic.
132
00:05:31,440 --> 00:05:34,580
Now if that still sounds a bit too philosophical,
133
00:05:34,580 --> 00:05:37,810
some examples in the context of our latest app
134
00:05:37,810 --> 00:05:41,160
are creating new tours in the app's database,
135
00:05:41,160 --> 00:05:45,270
checking if a user's password is correct when he logs in,
136
00:05:45,270 --> 00:05:47,320
validating user input data,
137
00:05:47,320 --> 00:05:50,860
or ensuring that only users who bought a certain tour
138
00:05:50,860 --> 00:05:52,220
can review it.
139
00:05:52,220 --> 00:05:55,490
So all this stuff is concerned with the business itself,
140
00:05:55,490 --> 00:05:58,200
and so it's part of the business logic.
141
00:05:58,200 --> 00:06:00,090
Now, we need to keep in mind that
142
00:06:00,090 --> 00:06:02,320
application logic and business logic
143
00:06:02,320 --> 00:06:05,480
are almost impossible to completely separate,
144
00:06:05,480 --> 00:06:07,670
and so sometimes they will overlap.
145
00:06:07,670 --> 00:06:09,360
But we should do our best efforts
146
00:06:09,360 --> 00:06:12,200
to keep the application logic in our controllers
147
00:06:12,200 --> 00:06:15,440
and business logic in our models.
148
00:06:15,440 --> 00:06:17,260
And there is even this philosophy of
149
00:06:17,260 --> 00:06:19,400
fat models, thin controllers,
150
00:06:19,400 --> 00:06:21,170
which says we should offload
151
00:06:21,170 --> 00:06:24,140
as much logic as possible into the models,
152
00:06:24,140 --> 00:06:28,180
to keep the controllers as simple and lean as possible.
153
00:06:28,180 --> 00:06:31,450
So a fat model will have as much business logic
154
00:06:31,450 --> 00:06:33,210
as we can offload to it,
155
00:06:33,210 --> 00:06:36,700
and a thin controller will have as little logic as possible,
156
00:06:36,700 --> 00:06:38,210
so that the controller is
157
00:06:38,210 --> 00:06:41,410
really mostly for managing the application's requests
158
00:06:41,410 --> 00:06:42,500
and responses.
159
00:06:42,500 --> 00:06:43,440
Okay?
160
00:06:43,440 --> 00:06:46,060
So, now keep all this in mind as we move on
161
00:06:46,060 --> 00:06:49,193
and progress into building our applications.
12413
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.