Tải bản đầy đủ (.pdf) (67 trang)

Đồ án tìm hiểu nestjs và xây dựng ứng dụng minh họa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.82 MB, 67 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM

BÁO CÁO ĐỒ ÁN 1
TÌM HIỂU NESTJS VÀ XÂY DỰNG ỨNG DỤNG MINH HỌA

Giảng viên hướng dẫn

: Th.S Nguyễn Tấn Toàn

Sinh viên

: Trần Bảo Ân

MSSV

: 20520377

Lớp

: SE121.N21

Thành phố Hồ Chí Minh, tháng 06 năm 2023


NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................


............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
............................................................................................................................................
Tp.HCM, ngày

tháng

năm 2023

Giảng Viên Hướng Dẫn

ThS. Nguyễn Tấn Toàn

1


2



LỜI CẢM ƠN
Trước hết, em xin gửi lời cảm ơn đến Trường Đại học Công nghệ thông tin –
ĐHQGTPHCM và các thầy cô là giảng viên của khoa Công nghệ phần mềm đã
tạo điều kiện để em hoàn thành đồ án 1 – Chủ đề Tìm hiểu về NestJS và xây dựng
ứng dụng minh họa.
Em xin gửi lời cảm ơn chân thành và sâu sắc đến thầy Nguyễn Tấn Toàn là giảng
viên hướng dẫn trực tiếp và trang bị cho em có những kiến thức căn bản vững
chắc để thực hiện đồ án này.
Trong khoảng thời gian thực hiện đồ án, em đã học hỏi thêm được nhiều kiến
thức, kinh nghiệm, biết được thêm về nhiều công nghệ mới. Em đã vận dụng
những kiến thức nền tảng đã tích lũy đồng thời kết hợp với việc học hỏi và nghiên
cứu những kiến thức mới. Từ đó, em vận dụng tối đa những gì đã học hỏi được
để hồn thành báo cáo đồ án này.
Tuy nhiên, trong quá trình thực hiện, em khơng tránh khỏi những thiếu sót. Chính
vì vậy, em rất mong nhận được góp ý từ phía thầy, cơ nhằm hoàn thiện những
kiến thức, kĩ năng và là hành trang để em thực hiện tiếp các đề tài khác trong
tương lai.
Xin chân thành cảm ơn thầy!
Tp.HCM, ngày ... tháng … năm 2023
Sinh viên thực hiện

Trần Bảo Ân

3


4



MỤC LỤC

Chương 01 Mở đầu .......................................................................................................... 9
I.

Thông tin người thực hiện...................................................................................... 9

II. Lý do chọn đề tài và mục tiêu ................................................................................ 9
III.

Phạm vi nghiên cứu .......................................................................................... 10

IV.

Đối tượng nghiên cứu ....................................................................................... 10

V. Kết quả hướng tới ................................................................................................ 10
Chương 02 NestJS .......................................................................................................... 12
I.

Giới thiệu chung về NestJS .................................................................................. 12

I.

Khái niệm quan trọng........................................................................................... 13
1. Decorators ......................................................................................................... 13
1. Pipes.................................................................................................................. 14
2. Providers bất đồng bộ (Asynchronous Providers) ............................................ 14
3. Modules động (Dynamic modules) .................................................................. 15
4. Vòng đời sự kiện (Lifecycle events) ................................................................ 16

5. Microservices với NestJS ................................................................................. 18
6. CLI .................................................................................................................... 20

II. Lý do nên chọn NestJS ........................................................................................ 20
Chương 03 - Xây dựng Website môi giới bất động sản Katana. .................................... 22
I.

Giới thiệu chung về Website môi giới bất động sản Katana ................................ 22
1. Phát biểu bài toán và hướng giải quyết ............................................................ 22

5


1. Công cụ, công nghệ sử dụng ............................................................................ 24
2. Danh sách yêu cầu ............................................................................................ 25
3. Mã nguồn .......................................................................................................... 27
I.

Phân tích, thiết kế ................................................................................................. 28
1. Phân tích, thiết kế ứng dụng ............................................................................. 28
2. Phân tích, thiết kế cơ sở dữ liệu .................................................................... 29
3. Đặc tả ................................................................................................................ 31

II.

Triển khai ........................................................................................................ 53

III.

Kiểm thử .......................................................................................................... 63


Chương 04: Kết luận ...................................................................................................... 64
1. Kết quả đạt được ................................................................................................ 64
4. Hướng phát triển ................................................................................................ 64
TÀI LIỆU THAM KHẢO .............................................................................................. 66

6


TĨM TẮT (Abstract)
Đồ án “Tìm hiểu về NestJS và xây dựng ứng dụng minh họa” tập trung vào khảo sát
thực trạng doanh nghiệp nghiên cứu ứng dụng công nghệ để từ đó xây dựng Website
môi giới bất động sản Katana. Đề tài tập trung vào lĩnh vưc bất động sản, cụ thể là
giới thiệu, quảng bá các dự án bất động sản, hỗ trợ khách hàng tiềm năng đến gần với
doanh nghiệp hơn. Đề tài áp dụng kiến trúc monolithic cho phía Backend và NextJS
cho phía Frontend với khả năng mở rộng, nâng cấp cao.
Đề tài được bắt đầu từ việc tìm hiểu thực trạng, đưa ra các vấn đề còn tồn đọng và
cần cải thiện. Xác định phạm vi, bài toán, mục tiêu của đề tài. Từ đó đưa ra các chức
năng cần có của ứng dụng. Ngoài việc xử lý các nghiệp vụ cho ứng dụng, em cũng đã
tìm hiểu, so sánh và lựa chọn các cơng nghệ mới và phù hợp giúp nâng cao trải nghiệm
người dùng, tối ưu chi phí phát triển, triển khai, bảo trì và nâng cấp.
Vì ứng dụng mang tính thực tiễn cao, việc yêu cầu thay đổi thường xuyên và thời gian
phát triển ngắn, quá trình phát triển sản phẩm đã vận dụng mơ hình Agile làm phương
pháp luận chính cho qui trình phát triển phần mềm. Qui trình phát triển được ghi nhận
bằng công cụ Github project. Kết quả thu được ở giai đoạn phân tích, thiết kế được
mơ hình hóa bằng UML thông qua công cụ PlantUML và giao diện được thiết kế bằng
Figma. Ở giai đoạn thực hiện, client và server được phát triển song song sử dụng thư
viện ReactJS cho client và NestJS cho server, sử dụng Visual Studio Code làm IDE
chính. Đề tài cịn tập trung vào kiểm thử để đảm bảo chất lượng phần mềm với qui
trình kiểm thử gồm unit test phía Backend viết bằng … và Frontend sử dụng Jest kết

hợp với React Testing Library; manual testing for Backend using Postman. Trong giai
đoạn vận hành, server đã được triển khai lên máy chủ Heroku, hồn tồn có thể truy
cập dữ liệu thơng qua api từ bất cứ thiết bị nào gửi yêu cầu có chứa trường xác thực
dữ liệu hợp lệ.

7


Phần cuối cùng của đồ án là trình bày kết quả đã thực hiện lên cuốn báo cáo, đưa ra
kết luận và hướng phát triển cho ứng dụng trong tương lai.
Nội dung đồ án được trình bày trong … chương, như sau:
-

Chương 01 - Giới thiệu tổng quan: Xác định mục tiêu, nội dung nghiên cứu, phạm
vi đề tài và thông tin người thực hiện.

-

Chương 02 - NestJS: Giới thiệu về NestJS framework, cách thức hoạt động, ưu
điểm và các trường hợp nên sử dụng NestJS.

-

Chương 03 - Xây dựng ứng dụng minh họa “Website môi giới bất động sản
Katana”
o Giới thiệu ứng dụng:
▪ Bài toán đặt ra
▪ Hướng giải quyết
▪ Tổng quan công nghệ sử dụng trong đồ án
o Phân tích u cầu: mơ hình hóa bài tốn thành các sơ đồ và đặc tả

o Thiết kế: đưa ra bản thiết kế kiến trúc ứng dụng, thiết kế database, thiết kế
giao diện
o Triển khai và kiểm thử: Công cụ, công nghệ sử dụng trong đề tài, các bước
triển khai. Kiểm thử đơn vị.

-

Chương 04 - Kết luận: Những kết quả đã đạt được sau khi kết thúc đồ án, khó
khăn, hạn chế và định hướng phát triển trong tương lai

8


Chương 01 Mở đầu
Thông tin người thực hiện
Họ tên: Trần Bảo Ân
MSSV: 20520377
Email:
1.

Lý do chọn đề tài và mục tiêu

Trong kỷ nguyên công nghệ thông tin bùng nổ như ngày nay, bất kể lĩnh vực nào cũng
đều cần sự hỗ trợ từ phía cơng nghệ đặc biệt là lĩnh vực bất động sản. Đối với các ngân
hàng, xử lý nghiệp vụ vơ cùng phức tạp thì việc xây dựng một nền tảng hỗ trợ tính tốn
là vơ cùng cấp thiết. Nó mang lại hàng loại lợi ích tuyệt vời, giúp cho nghiệp vụ trở nên
dễ dàng và nhanh chóng hơn bao giờ hết. Do đó, việc xây dựng ứng dụng website sẽ hỗ
trợ doanh nghiệp tăng trưởng vượt bậc.
Hiện nay, có rất nhiều ngôn ngữ, công nghệ, thư viện, framework hỗ trợ phát triển ứng
dụng web một cách thuận tiện và nhanh chóng mà vẫn đảm bảo tính chính xác, tính bảo

mật, tính tiện dụng và nhu cầu nâng cấp, mở rộng sau này. Một trong những framework
hiện đại được sử dụng phổ biến nhất trong giai đoạn hiện tại để xây dựng backend là
NestJS.
Javascript là ngôn ngữ lập trình bậc cao có cộng đồng người sử dụng đơng đảo hàng đầu
hiện nay. Với nhiều lợi ích to lớn về mặt triển khai, như cú pháp đơn giản, thực thi phía
người dùng nên tăng trải nghiệm người dùng, “viết một lần, thực thi ở khắp nơi” …
Javascript luôn là sự lựa chọn hàng đầu của các nhà phát triển. Tuy nhiên, để cấu hình
một ứng dụng thuần Javascript mà khơng có sự hỗ trợ từ bất kì thư viện và framework
nào thì mất rất nhiều thời gian, cơng sức và không cần thiết. Do đó, NestJS ra đời nhằm

9


rút ngắn thời gian cài đặt, cấu hình và cung cấp bộ khung để các nhà phát triển chỉ cần
tập trung vào công việc xây dựng mã nguồn cho ứng dụng.
2.

Phạm vi nghiên cứu

Trong đồ án này, em tập trung nghiên cứu tổng quan, cơ cấu, cách thức hoạt động của
NestJS framework. Sau đó, áp dụng kiến thức nghiên cứu được về NestJS và kết hợp
cùng những kiến thức liên quan để xây dựng ứng dụng minh họa “Website môi giới bất
động sản Katana” nhằm giúp em có cái nhìn sâu sắc về kiến thức lý thuyết đã tìm hiểu.
3.

Đối tượng nghiên cứu

Nghiên cứu chi tiết về cách thức hoạt động, ưu – khuyết điểm của các công cụ mà NestJS
cung cấp, hiểu ý nghĩa và chức năng của mô hình MVC được vận dụng trong NestJS.
Nghiên cứu các yêu cầu liên quan trong lĩnh vực bất động sản để có kiến thức nền tảng

về nghiệp vụ, hỗ trợ xây dựng ứng dụng minh họa.
4.

Kết quả hướng tới

Với đề tài này, em hướng đến các mục tiêu sau:
• Ở vai trò cá nhân, em mong muốn mở rộng kiến thức trong lĩnh vực xây dựng
ứng dụng web sử dụng NestJS framework thơng qua q trình tìm hiểu cơng nghệ.
Ứng dụng kiến thức tìm hiểu về NestJS vào xây dựng ứng dụng cho doanh nghiệp
môi giới bất động sản. Cá nhân em đã tự thu thập cho mình những kĩ năng liên
quan trong quá trình thưc hiện đồ án bao gồm: phương pháp tiếp cận và nghiên
cứu một framework mới, quản lý thời gian, thực hiện các khâu phát triển phần
mềm chuyên nghiệp và rất nhiều công cụ, công nghệ hiện đại bao gồm NestJS,
kiến trúc MVC. Bên cạnh kiến thức về cơng nghệ, thơng qua ứng dụng minh họa,
em cịn tiếp thu được các kiến thức liên quan đến lĩnh vực bất động sản.

10


• Đối với các lập trình viên dùng đồ án nghiên cứu này làm tài liệu tham khảo:
thông qua tài liệu nghiên cứu và ứng dụng nhóm đã xây dựng, các lập trình viên
khác có thể dễ dàng định hướng cần phải tìm hiểu sâu các phần nào khi sử dụng
NestJS để xây dựng Backend cho website.

11


Chương 02 NestJS
1.


Giới thiệu chung về NestJS

NodeJS là một Javascript runtime, ra đời năm 2009, được xây dựng trên “V8
Javascript Engine”. NodeJS được viết bằng C++, thực hiện việc biên dịch mã nguồn
Javascript thành bytecode vì thế NodeJS đã làm cho ứng dụng khơng chỉ chạy được
trên trình duyệt mà còn chạy được trên máy cá nhân như một ứng dụng độc lập. Một
đặc điểm của NodeJS giúp NodeJS thân thiện với người dùng là hướng sự kiện
(Event-driven) và không chặn nhập xuất (non-blocking I/O). Nghĩa là, các yêu cầu
xử lý có thể gửi song song mà không cần đợi phản hồi. Non-blocking I/O loại bỏ nhu
cầu đa luồng vì server có thể xử lý nhiều yêu cầu cùng lúc. Tuy nhiên, để xây dựng
ứng dụng bằng NodeJS sẽ mất rất nhiều thời gian cơng sức để cấu hình, vì thế nhiều
framework ra đời để hỗ trợ cho các lập trình viên với mục tiêu để họ tập trung vào
phát triển mã nguồn. Framework là một cấu trúc phát triển ứng dụng, cung cấp cho
các lập trình viên cách tiếp cận tiêu chuẩn hóa trong việc xây dựng và triển khai các
ứng dụng. Một framework thường bao gồm các thành phần, thư viện và các quy ước
thiết kế được sắp xếp một cách hợp lý để giúp giải quyết các vấn đề phổ biến trong
phát triển ứng dụng.
NestJS là một framework mã nguồn mở cung cấp cho các nhà phát triển một kiến
trúc ứng dụng linh hoạt, hiệu quả các ứng dụng NodeJS server-side 1. Nó được xây
dựng trên nền tảng của Express.js và có thể được sử dụng để phát triển các ứng dụng
máy chủ hiệu quả và có khả năng mở rộng. NestJS phát triển ứng dụng theo hướng
kết hợp cả Object Oriented Programming (hướng đối tượng)2, Functional
Ứng dụng NodeJS server-side là ứng dụng chạy trên môi trường máy chủ hơn là chạy cố định ở một
thiết bị người dùng cụ thể. Máy chủ ở đây được viết bằng NodeJS.
2
Object Oriented Programming – OOP là một kỹ thuật lập trình mơ hình hóa các thành phần thành đối
tượng và lớp. OOP tập trung vào đối tượng thao tác và đặc tính cấu thành nên đối tượng hơn là logic để
có thể thao tác chúng.
1


12


Programming (hướng cấu trúc)3 và Functional Reactive Programming (hướng phản
ứng chức năng)4. NestJS cho phép các nhà phát triển xây dựng các ứng dụng theo
cách module hóa, giúp tăng tính tổ chức và dễ bảo trì của mã nguồn. Nó cũng hỗ trợ
việc sử dụng dependency injection, decorator và module, giúp người dùng dễ dàng
học và sử dụng NestJS. NestJS đã đóng gói nhiều cấu hình ẩn bên trong và cung cấp
nhiều câu lệnh CLI để lập trình nhanh chóng và dễ dàng tạo ra API mà không mất
quá nhiều thời gian để tạo cơ sở mã nguồn (codebase).
2.

Khái niệm quan trọng

Ngoài các khái niệm cơ bản mà các framework khác của NodeJS cung cấp như
Controllers, Providers, Modules, NestJS cung cấp các khái niệm đặc thù hoặc các
khái niệm cũ nhưng được hiểu khác đi trong phạm vi của NestJS framework.
1. Decorators
Decorator là một đặc trưng của NestJS cho phép lập trình viên kế thừa, thay đổi, mở
rộng hành vi của một lớp, một phương thức hoặc thuộc tính. Người lập trình sử dụng
decorator bằng cách sử dụng kí tự “@” trước các decorator làm dấu hiệu. Decorator
có thể là lớp, phương thức hoặc thuộc tính, được sử dụng trong nhiều mục đích như
routing, dependency injection, middleware, guards, interceptors, …Ví dụ một số
decorator như @Controller, @Provider, @Get, @Post, @Patch, @Put, @Param, …
NestJS còn cho phép người dùng linh động hơn bằng cách cung cấp phương thức tùy
chỉnh decorator (custom decorator).

Functional Programming – FP là một mơ hình lập trình dựa trên hàm toán học, tránh việc thay đổi giá
trị của dữ liệu, làm cho các hàm trở nên chuyên biệt, mỗi hàm chỉ thực hiện một chức năng, không dồn
quá nhiều logic vào một hàm từ đó giúp cho việc kiểm soát mã nguồn trở nên dễ dàng hơn.

4
Functional Reactive Programming – FRP là mơ hình lập trình kết hợp giữa hướng chức năng và
hướng phản ứng để xây dựng ứng dụng. Nó hỗ trợ thay đổi trạng thái của ứng dụng ứng dụng một cách
linh hoạt dựa vào sự kiện, hành vi mà sự kiện, hành vi đó thay đổi liên tục và rời rạc.
3

13


1. Pipes
Pipes là một annotated class, với 2 mục đích chính:
• Chuyển đổi kiểu dữ liệu (Transformation): chuyển kiểu dữ liệu thành kiểu người
lập trình mong muốn


Kiểm tra dữ liệu (Validation): xác thực dữ liệu đầu vào và báo lỗi khi cần thiết.

Có 9 loại pipes:
• ValidationPipe
• ParseIntPipe
• ParseFloatPipe
• ParseBoolPipe
• ParseArrayPipe
• ParseUUIDPipe
• ParseEnumPipe
• DefaultValuePipe
• ParseFilePipe
2. Providers bất đồng bộ (Asynchronous Providers)
Providers bất đồng bộ là một kiểu provider xử lý theo kiểu bất đồng bộ. Nghĩa là thay
vì trả về một giá trị, phương thức sử dụng bất đồng bộ sẽ trả về một Promise mà

Promise này sẽ trả về một giá trị trong tương lai. Cụ thể, ta sử dụng cú pháp
async/await và useFactory. NestJS sẽ chờ giải quyết Promise trước khi khởi tạo bất
kì lớp nào phụ thuộc vào injects.

14


3. Modules động (Dynamic modules)
Modules trong NestJS là một tập các components như providers, controllers,
services… được đóng gói, có decorator là @Module(). Mục đích của Modules là
đóng gói các hàm thành một đơn vị và quản lý dependency từ đó lập trình viên có thể
biết được components thuộc về modules nào, giúp cho việc tổ chức, quản lý
components trở nên dễ dàng hơn.
Module động hay Dynamic modules cho phép người lập trình cấu hình và tạo các
module động tại thời điểm runtime. Ưu điểm của module động là chỉ tải các module
dựa vào input từ người dùng hoặc các điều kiện runtime khác nên làm cho ứng dụng
linh động và tối ưu được hiệu suất.
Để sử dụng modules động, ta dùng “forRootAsync”. Ví dụ:

15


Trong ví dụ trên, “ConfigModule” và “DatabaseModule” chỉ được tải lúc runtime sử
dụng phương thức “forRootAsync()”. Thêm vào đó, “ConfigService” được inject vào
“DatabaseModule” vì thế các modules trên cịn có thể tải tự động dựa vào các biến
môi trường khác.
4. Vòng đời sự kiện (Lifecycle events)
Trong NestJS, vòng đời của mỗi sự kiện được chia thành 3 giai đoạn: khởi tạo, chạy
và kết thúc.


16


NestJS cung cấp các hooks tương ứng với từng giai đoạn trong vòng đời của sự kiện
như
onModuleInit(): được gọi khi các dependency của module được resolve
onApplicationBootstrap(): được gọi khi tất cả các module được khởi tạo nhưng trước
khi lắng nghe các kết nối
onModuleDestroy(): được gọi sau khi có các cờ báo hiệu giai đoạn kết thúc

17


beforeApplicationShutdown(): được gọi sau tất cả các onModuleDestroy() hoàn
thành, các kết được đóng
onApplicationShutdown(): được gọi sau khi tất cả các kết nối được đóng
5. Microservices với NestJS
a. Giới thiệu chung
Các ứng dụng thiết kế theo hướng monolithic gặp phải các vấn đề khi mở rộng và
nâng cấp hoặc đơn giản là các nghiệp vụ của doanh nghiệp trở nên phức tạp. Vì
thế, kiến trúc microservice ra đời để giải quyết bài toán của kiến trúc monolithic.
Nói một cách khái quát, microservice chia các xử lý logic thành các thành phần
nhỏ độc lập, được gọi là các dịch vụ (service). Mỗi service có thể phát triển, quản
lý và bảo trì độc lập.
Trong NestJS, các microservice sử dụng nhiều tầng vận chuyển khác nhau như
HTTP, websocket, TCP, NAT... Microservice trong NestJS sử dụng TCP làm giao
thức mặc định.
NestJS còn cung cấp nhiều thư viện giúp cho việc tạo và quản lý microservices
trở nên dễ dàng hơn rất nhiều như Kafka, Redis, NATS, RabbitMQ…
b. Kafka với NestJS

Kafka về tổng quan được thiết kế để xử lý các luồng dữ liệu với khả năng xử lý
dữ liệu tốc độ cao và độ trễ thấp. Kafka được thiết kế theo hướng sự kiện (Event
-driven). Kafka được sử dụng trong trường hợp một service gửi các sự kiện đến
các service khác để xử lý mà không cần chờ kết quả trả về. Trong mơ hình hoạt
động của Kafka, một service đóng vai trò là bên cung cấp (producer) ghi các sự

18


kiện vào một bản ghi và bên tiêu thụ (consumer) sẽ đọc sự kiện từ bản ghi và xử
lý. Các producer không cần đợi kết quả xử lý từ consumer.
Để sử dụng Kafka với Nest, ta dùng “@nestjs/microservices” module.

Đặc điểm của Kafka với NestJS:
• Cấu hình đơn giản: cung cấp cơng cụ đơn giản hóa việc cấu hình cài đặt Kafka
client
• Built-in serialization: kafka hỗ trợ các định dạng tuần tự hóa thông báo khác nhau,
bao gồm JSON, Avro và Protobuf.
• Hỗ trợ multiple topics: NestJS Kafka cho phép subscribe nhiều topic từ một
consumer.
• Xử lý lỗi: Kafka module cung cấp các tính năng xử lý lỗi giúp lập trình viên tránh
một số lỗi thường gặp thông qua lớp “KafkaRetriableException”.

19


6. CLI
Một trong những ưu điểm vượt trội của NestJS framework, NestJS CLI (Command
Line Interface) là bộ lệnh hỗ trợ nhà phát triển tạo, quản lý và dựng ứng dụng NestJS
nhanh chóng và dễ dàng hơn rất nhiều. Bộ câu lệnh CLI cung cấp các câu lệnh để

xây dựng và đóng gói các công việc như tạo modules, services, controllers...
Các chức năng chính của bộ lệnh là:
• Tạo dự án: tập các câu lệnh dùng để tạo khung codebase cho dự án
• Tạo mã nguồn: tập các câu lệnh tạo thành phần quen thuộc như controllers,
services, modules, pipes…
• Dependency Injection: tự động inject các giá trị phụ thuộc cho các component
• Cấu hình: tập các câu lệnh hỗ trợ cấu hình ứng dụng
• Build và chạy ứng dụng: tập các lệnh để bật/tắt máy chủ
3.

Lý do nên chọn NestJS

Phát triển ứng dụng với tốc độ nhanh: NestJS đã cung cấp codebase và tập câu lệnh
CLI cực kì mạnh mẽ giúp tổ chức mã nguồn một cách có ứng dụng và nhanh chóng.
Các nhà phát triển có thể tập trung vào việc phát triển mã nguồn mà không mất nhiều
thời gian cho việc cấu hình và cài đặt.
Cung cấp kiến trúc ứng dụng theo hướng module hóa: NestJS được thiết kế với kiến
trúc mô-đun giúp dễ dàng xây dựng các ứng dụng có thể mở rộng và bảo trì. Lập
trình viên có thể dễ dàng tách ứng dụng của mình thành các module khác nhau, có
thể được sử dụng lại và kiểm tra độc lập.
Hỗ trợ cả Restful API và GraphQL: Từ một cơ sở mã NestJS duy nhất, ứng dụng của
có thể được điều chỉnh để phù hợp với REST hoặc GraphQL một cách dễ dàng tùy

20


thuộc vào cách tiếp cận nào phù hợp. Theo mặc định, cách tiếp cận tiêu chuẩn là
REST, nhưng có thể dễ dàng chuyển sang GraphQL và có hai cách để triển khai
GraphQL bằng cách sử dụng NestJS.
Hỗ trợ cả Typescript và Javascript: NestJS hỗ trợ mạnh mẽ TypeScript. Mặc định

ngôn ngữ mà NestJS sử dụng là Typescript tuy nhiên, NestJS còn có thể triển khai
bằng Javascript.
Hỗ trợ mạnh mẽ kiến trúc microservice: NestJS cung cấp bộ công cụ hỗ trợ xây dựng
ứng dụng theo hướng microservice với khả năng mở rộng và chịu lỗi cao.

21


Chương 03 - Xây dựng Website môi giới bất động sản Katana.
1. Giới thiệu chung về Website môi giới bất động sản Katana
1.1. Phát biểu bài toán và hướng giải quyết
Các thành phố lớn của Việt Nam hiện nay có mật độ dân số khá cao. Trong
đó, mật độ dân số năm 2022 sẽ là 4292 người/km2 tại TP.HCM và 2398
người/km2 tại Hà Nội. Nhiều cư dân là người nước ngồi, sinh viên hoặc
những người khơng phải là người bản xứ, nhưng những người cần tìm nhà ở—
căn hộ hoặc nhà cho thuê—để sinh sống và làm việc gặp khó khăn do thiếu
thông tin về nhà ở. Họ có thể liên hệ với các cơ quan với mục đích nhanh
chóng tìm được một nơi có thể chấp nhận được. Tuy nhiên, quá trình lao động
của con người tốn nhiều thời gian mà chưa thực sự hiệu quả. Điều đó có nghĩa
là khách hàng nói chung khó tìm được một địa điểm phù hợp trong thời gian
hạn hẹp.
Ngoài ra, chủ nhà cần quảng cáo cho người thuê nhà phải nỗ lực rất nhiều vì
họ dựa vào các kỹ thuật thủ cơng như tờ rơi và mơi giới thơng thường. lãng
phí và góp phần làm xói mịn sức hấp dẫn của đơ thị. Nhận thấy cả cung và
cầu đều không đủ cầu nhưng cần phải có cầu nối. Một chi tiết quan trọng hơn
là các doanh nghiệp kinh doanh bất động sản thường được quản lý thủ công.
Đó là tài liệu như hợp đồng được quản lý và lưu trữ thủ công gây ra nhiều vấn
đề. Doanh nghiệp phải tốn nhiều công sức và tiền bạc hơn để đặt hàng và lưu
kho vì đặc thù của bất động sản là mọi giấy tờ đều quan trọng.
Trước khi điều đó xảy ra, em muốn tạo ra một ứng dụng giới thiệu, môi giới

bất động sản trực tuyến giúp người thuê nhà dễ dàng xác định các mặt hàng
họ cần, sử dụng nhanh chóng và tiết kiệm thời gian. và các nhà cung cấp xác
định vị trí người mua nhanh chóng, sau đó thương mại thành công. Chương

22


trình phải hồn thành một số mục tiêu chung, bao gồm quản lý khách hàng,
quản lý dự án bất động sản và thu hẹp khoảng cách giữa người dùng và các
dự án bất động sản có sẵn. Ứng dụng này chưa khả dụng do các doanh nghiệp
chưa được chuyển đổi kỹ thuật số. Đây là một ứng dụng hoàn toàn nguyên
bản. Bằng cách đăng nhập vào ứng dụng với nhiều quyền khác nhau, ứng dụng
hỗ trợ việc quản lý các công ty và khách hàng mua và bán tài sản.
Ở vai trị khách hàng, người dùng khơng cần đăng nhập vào ứng dụng. Các
nhóm khách hàng được chia thành hai loại dựa trên nhu cầu của họ: nhu cầu
mua và nhu cầu bán. Khách hàng có quyền xem chi tiết các bài viết về bất
động sản, bao gồm thông tin về khu vực, vị trí cụ thể kèm theo bản đồ, giá cả,
loại đất, diện tích, mơ tả, hình ảnh và video ví dụ. Quan trọng hơn, bằng cách
sử dụng các bộ lọc về vị trí, giá cả và khu vực, khách hàng có thể dễ dàng
chọn được ngôi nhà lý tưởng cho mình. Khách hàng mua hàng có thể gửi dữ
liệu cá nhân của họ. Các nhóm khách hàng được chia thành hai loại dựa trên
nhu cầu của họ: nhu cầu mua và nhu cầu bán. Khách hàng có quyền xem chi
tiết các bài viết về bất động sản, bao gồm thơng tin về khu vực, vị trí cụ thể
kèm theo bản đồ, giá cả, loại đất, diện tích, mơ tả, hình ảnh và video ví dụ.
Quan trọng hơn, bằng cách sử dụng các bộ lọc về vị trí, giá cả và khu vực,
khách hàng có thể dễ dàng chọn được ngơi nhà lý tưởng cho mình. Khách
hàng mua hàng có thể gửi dữ liệu cá nhân của họ.
Nếu người dùng là quản trị viên, bạn cần đăng nhập để truy cập ứng dụng. Do
chính sách kinh doanh, hiện tại chỉ có quản trị viên ứng dụng và giám đốc
được phép truy cập ứng dụng thông qua tài khoản quản trị viên đang hoạt

động. Ứng dụng cho phép quản lý khách hàng và thống kê thông tin khách
hàng dựa trên các yếu tố như yêu cầu, khu vực,… Thông qua công cụ lọc,
người quản trị có thể dễ dàng tìm kiếm thơng tin khách hàng bằng nhiều tham

23


số. Đối với quản trị viên, hãy xuất số liệu thống kê dưới dạng tệp Excel. Do
tính đa dạng của các bài đăng trên website bao gồm tin mua bán nhà đất, tin
nóng, tin giới thiệu, tin tư vấn pháp luật… nên ứng dụng còn hỗ trợ người
quản trị quản lý các tin đăng trên website. Cuối cùng, việc quản lý người dùng,
theo dõi tất cả các bất động sản được gửi đến ứng dụng, tiếp nhận và xử lý
thông tin người dùng sẽ đơn giản hơn cho quản trị viên. Ứng dụng được xây
dựng nhằm đáp ứng yêu cầu người quản trị thường xuyên tương tác với ứng
dụng để cập nhật tin tức.
1.2. Công cụ, công nghệ sử dụng
Một web được đánh giá cao khi tốc độ xử lý dữ liệu nhanh, bảo mật thông tin
khách hàng tốt. Và nhóm nhận thấy rằng, ExpressJS có khả năng thực hiện rất
tốt các công việc nêu trên, mà NestJS là framework xây dựng trên nền tảng
ExpressJS. Bởi vì:
• Khả năng bảo mật của ExpressJS được đánh giá là rất tốt vì được
NodeJS hỗ trợ framework vô cùng mạnh mẽ. Hơn thế nữa, cấu trúc của
ExpressJS được cho rằng là rất chặt chẽ. Thêm vào đó, nhóm sử dụng
các công nghệ bảo mật rất được thịnh hành và tin dùng ngày nay như
mã hố bằng Bcrypt, JWT….
• Cộng đồng sử dụng NestJS khá đơng đảo nên dễ dàng tìm kiếm sự hỗ
trợ và thường xuyên được cập nhật, nâng cấp.
• Ứng dụng NestJS rất dễ để bảo trì cũng như là nâng cấp về sau.
Về phía giao diện, với một website, trải nghiệm người dùng và giao diện mang
tính thẩm mỹ cao được xem như là các tiêu chí hàng đầu thu hút khách hàng.


24


×