ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
ĐỒ ÁN MÔN HỌC
ĐỒ ÁN 1
PHÁT TRIỂN VÍ ĐIỆN TỬ DỰA TRÊN CƠNG
NGHỆ THANH TỐN KHƠNG TIẾP XÚC
Giảng viên hướng dẫn :
TS. Nguyễn Trịnh Đông
Sinh viên thực hiện 1 :
Châu Đức Hiệp
Mã sinh viên 1
20520499
:
Sinh viên thực hiện 2 :
Trần Nam Khánh
Mã sinh viên 2
20520577
:
TP. HỒ CHÍ MINH, THÁNG 7 NĂM 2023
LỜI CẢM ƠN
Em xin gửi lời cảm ơn chân thành và sự tri ân sâu sắc đến thầy đã hướng dẫn, tạo
điều kiện cho nhóm chúng em hồn thành đồ án mơn Đồ án 1.
Trong vịng 11 tuần, qua các buổi học, nhờ sự chỉ dẫn nhiệt tình của thầy, em đã tiếp
thu được những kiến thức quan trọng, bổ ích cùng những góp ý chân thành để có thể
làm được một đồ án hoàn chỉnh. 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 quy trình để tạo ra một sản
phẩm phần mềm.
Bên cạnh đó, chúng em xin cảm ơn các bạn bè trong lớp đã động viên, thảo luận và
góp ý cho nhóm đồng thời đã khơi thêm nguồn động lực cho nhóm trong suốt q
trình đầy khó khăn.
Mặc dù đã cố gắng hồn thành báo cáo với tất cả nỗ lực song báo cáo của nhóm chúng
em chắc chắn khơng tránh khỏi những thiếu sót, em rất mong nhận được sự thơng
cảm và góp ý chân thành từ thầy. Nhóm em xin chân thành cảm ơn.
Nhóm sinh viên thực hiện:
Châu Đức Hiệp
Trần Nam Khánh
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
......................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
Tp.HCM, ngày … tháng 7 năm 2023
GVHD
TS. Nguyễn Trịnh Đông
TĨM TẮT
Đồ án với đề tài "Phát triển ví điện tử dựa trên cơng nghệ thanh tốn khơng
tiếp xúc" tập trung vào việc xây dựng một hệ thống ví điện tử cơ bản có khả năng
đáp ứng nhu cầu thanh toán của người dùng và cung cấp cho các đối tác một hệ
thống có khả năng chịu tải tốt, có khả năng mở rộng cao.
Đề tài bắt đầu từ việc tìm hiểu thực trạng, xác định các vấn đề hiện tại cần
giải quyết hoặc cải thiện. Mục tiêu, phạm vi của đề tài và các chức năng cần có của
hệ thống đã được xác định rõ ràng. Bên cạnh việc xử lý các nghiệp vụ chính của hệ
thống, tơi 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 để
nâng cao trải nghiệm người dùng, tối ưu hóa chi phí phát triển và triển khai.
Với sự phân tích chi tiết các yêu cầu, thời gian phát triển ngắn, và các yêu
cầu, tính năng ít thay đổi, đồ án đã sử dụng mơ hình Waterfall để phát triển hệ
thống. Kết quả thu được trong giai đoạn thiết kế như kiến trúc hệ thống, cơ sở dữ
liệu, giao diện người dùng, và sơ đồ tuần tự được thể hiện thông qua công cụ thiết
kế Figma và Draw.io.
Trong giai đoạn thực hiện, server và client đã được phát triển song song với
công nghệ phù hợp. Bên server, chúng tôi đã sử dụng ExpressJS để xây dựng ứng
dụng, cùng với TypeORM để tạo và tương tác với model. Chúng tôi đã sử dụng
Passport để xác thực người dùng và JWT, cùng với Firebase Admin để gửi thông
báo. Bên client, chúng tôi đã sử dụng Flutter để phát triển ứng dụng cho cả Android
và iOS.
Công việc kiểm thử unit test đã được thực hiện xuyên suốt quá trình phát
triển, và kiểm thử tích hợp đã được thực hiện ở cuối giai đoạn. Trong giai đoạn vận
hành, server đã được triển khai lên Google Cloud, cho phép truy cập dữ liệu thơng
qua API từ bất kỳ thiết bị nào có yêu cầu và trường xác thực hợp lệ.
Phần cuối cùng của đồ án là việc trình bày kết quả đã thực hiện trong cuốn
báo cáo, đưa ra kết luận và hướng phát triển cho hệ thống trong tương lai.
Nội dung đồ án được trình bày trong 5 chương:
-
Chương 01: Tổng quan
Trình bày sơ bộ về thực trạng, nhu cầu thực tế. Xác định mục tiêu và phạm vi
đề tài.
-
Chương 02: Cơ sở lý thuyết, tổng quan công nghệ
Giớ thiệu về giải thuật, những công nghệ, nền tảng được sử dụng trong đồ
án.
-
Chương 03: Phân tích thiết kế ứng dụng
Phân tích yêu cầu, thiết kế, hiện thực và triển khai ứng dụng.
-
Chương 04: Kết luận
-
Chương 05: Cài đặt và thử nghiệm
Những kết quả đạt được sau khi kết thúc đồ án. Những hạn chế, khó khăn
trong q trình phát triển đồ án và nêu ra hướng phát triển trong tương lai.
MỤC LỤC
LỜI CẢM ƠN ..............................................................................................................
TÓM TẮT ....................................................................................................................
MỤC LỤC ....................................................................................................................
DANH MỤC TỪ VIẾT TẮT .......................................................................................
Chương 1.
1.1.
TỔNG QUAN..................................................................................... 1
Khảo sát hiện trạng ....................................................................................... 1
1.1.1.
Nhu cầu thực tế đề tài............................................................................. 1
1.1.2.
Khảo sát một số ứng dụng hiện có ......................................................... 1
1.2.
Lí do thực hiện đề tài .................................................................................... 3
1.3.
Mục tiêu ........................................................................................................ 4
1.3.1.
Đối tượng sử dụng.................................................................................. 4
1.3.2.
Yêu cầu .................................................................................................. 4
Chương 2.
2.1.
CƠ SỞ LÝ THUYẾT, TỔNG QUAN CƠNG NGHỆ ....................... 7
Cơng nghệ sử dụng ....................................................................................... 7
2.1.1.
Flutter ..................................................................................................... 7
2.1.2.
BloC ....................................................................................................... 9
2.1.3.
ExpressJs .............................................................................................. 11
2.1.4.
TypeORM ............................................................................................ 13
2.1.5.
Firebase Cloud Messaging ................................................................... 16
2.1.6.
JSON Web Token ................................................................................ 18
2.1.7.
MySQL................................................................................................. 20
Chương 3.
3.1.
PHÂN TÍCH THIẾT KẾ ỨNG DỤNG ............................................ 22
Use case ...................................................................................................... 22
3.1.1.
Sơ đồ Use case ..................................................................................... 22
3.1.2.
Danh sách Actors ................................................................................. 23
3.1.3.
Danh sách các Use case ....................................................................... 23
3.1.4.
Đặc tả Use case .................................................................................... 24
3.2.
Activity diagram ......................................................................................... 39
3.2.1.
Lược đồ hoạt động đăng nhập .............................................................. 39
3.2.2.
Lượt đồ hoạt động đăng ký .................................................................. 39
3.2.3.
Lược đồ hoạt động đăng xuất ............................................................... 40
3.2.4.
Lược đồ hoạt động OTP ....................................................................... 40
3.2.5.
Lược đồ hoạt động Xem lịch sử giao dịch ........................................... 41
3.2.6.
Lược đồ hoạt động Chuyển tiền ........................................................... 41
3.2.7.
Lược đồ hoạt động Liên kết ngân hàng................................................ 42
3.2.8.
Lược đồ hoạt động Nạp tiền ................................................................. 42
3.2.9.
Lược đồ hoạt động Rút tiền.................................................................. 43
3.3.
Thiết kế cơ sở dữ liệu.................................................................................. 44
3.3.1.
Sơ đồ ERD ........................................................................................... 44
3.3.2.
Mô tả chi tiết ........................................................................................ 44
3.4.
Thiết kế hệ thống ........................................................................................ 48
3.5.
Đặc tả API ................................................................................................... 49
3.5.1.
Đặc tả API cho Authentication: ........................................................... 49
3.5.2.
Đặc tả API cho User: ........................................................................... 53
3.5.3.
Đặc tả API cho Transaction: ................................................................ 56
3.5.4.
Đặc tả API cho Wallet: ........................................................................ 59
3.6.
Thiết kế giao diện ....................................................................................... 61
3.6.1.
Danh sách các màn hình ....................................................................... 61
3.6.2.
Giao diện .............................................................................................. 64
........................................................................................................................... 64
Chương 4.
KẾT LUẬN ...................................................................................... 74
4.1.
Kết quả đạt được ......................................................................................... 74
4.2.
Những ưu điểm và hạn chế ......................................................................... 74
4.2.1.
Ưu điểm ................................................................................................ 74
4.2.2.
Hạn chế ................................................................................................ 75
4.3.
Hướng phát triển ......................................................................................... 76
Chương 5.
CÀI ĐẶT VÀ THỬ NGHIỆM ......................................................... 77
5.1.
Môi trường cài đặt....................................................................................... 77
5.2.
Các thư viện, framework liên quan ............................................................. 77
5.3.
Kiểm thử phần mềm.................................................................................... 77
5.4.
Hướng dẫn cài đặt ....................................................................................... 77
TÀI LIỆU THAM KHẢO ........................................................................................ 78
DANH MỤC TỪ VIẾT TẮT
STT
Tên
Diễn giải
1
STT
Số thứ tự
2
PK
Primary key
3
FK
Foreign key
4
ERD
Entity relationship diagram
5
UI
User interface
6
UX
User experience
CHƯƠNG 1.
1.1.
TỔNG QUAN
Khảo sát hiện trạng
1.1.1. Nhu cầu thực tế đề tài
Hiện nay, với sự phát triển mạnh mẽ của cơng nghệ thơng tin, các dịch vụ ngân
hàng, thanh tốn điện tử trở nên phổ biến hơn. Quá trình thanh tốn khơng tiếp xúc
ngày càng trở nên quan trọng, đặc biệt trong bối cảnh dịch Covid. Từ đó nhu cầu về
sử dụng ví điện tử ngày càng tăng cao, tạo ra cơ hội phát triển cho các ứng dụng ví
điện tử.
1.1.2. Khảo sát một số ứng dụng hiện có
1.1.2.1.
Momo
1. Tổng quan
Momo là một ứng dụng ví điện tử hàng đầu tại Việt Nam, được thành lập vào
năm 2013. Momo cung cấp dịch vụ ví điện tử cho phép người dùng thanh tốn hóa
đơn, chuyển tiền, mua hàng trực tuyến một cách nhanh chóng và tiện lợi. Momo có
giao diện dễ sử dụng, hệ thống thanh tốn an tồn và các chương trình khuyến mãi
hấp dẫn.
1
2. Chức năng chính
Hình 1.1: Chức năng chính của momo (chuyển tiền)
1.1.2.2.
ZaloPay
1. Tổng quan
ZaloPay là một ứng dụng ví điện tử được phát triển bởi Zalo Group. Với
ZaloPay, người dùng có thể thanh tốn hóa đơn, chuyển tiền, mua hàng trực tuyến,
2
nạp tiền điện thoại và nhiều hơn thế. ZaloPay cung cấp giao diện thân thiện, hệ
thống thanh tốn an tồn và các ưu đãi hấp dẫn cho người dùng.
2. Chức năng chính
Hình 1.2: Chức năng chính của zalopay (chuyển tiền)
1.2.
Lí do thực hiện đề tài
Đại dịch COVID-19, dù đã qua, nhưng để lại nhiều hậu quả và thay đổi lớn trong
cách sống và làm việc của chúng ta. Một trong những thay đổi đó là xu hướng
chuyển dịch mạnh mẽ từ giao dịch tiếp xúc trực tiếp sang thanh toán không tiếp xúc
để giảm thiểu rủi ro lây nhiễm từ mơi trường xung quanh.
Cơng nghệ thanh tốn khơng tiếp xúc thông qua NFC (Near Field Communication)
đã phát triển mạnh mẽ và trở thành một giải pháp hiệu quả để đáp ứng xu hướng
này. Tuy nhiên, dù công nghệ này đã trở nên khá phổ biến ở nhiều nước phát triển,
3
nhưng tại Việt Nam, NFC vẫn chưa được ứng dụng rộng rãi. Phần lớn người dùng
tại Việt Nam đang sử dụng các ứng dụng ví điện tử như Momo, Zalopay để thực
hiện các giao dịch thanh toán, nhưng đáng tiếc là hai ứng dụng này hiện tại vẫn
chưa hỗ trợ cơng nghệ NFC. Đây là một bài tốn thực tế và thách thức đang đặt ra,
và cũng chính là động lực để thực hiện đề tài "Phát triển ví điện tử dựa trên cơng
nghệ thanh tốn khơng tiếp xúc".
Vì vậy, đề tài "Phát triển ví điện tử dựa trên cơng nghệ thanh tốn khơng tiếp xúc"
được đưa ra nhằm giải quyết vấn đề trên. Ứng dụng này sẽ được thiết kế hướng đến
đối tượng người dùng là những người thường xuyên sử dụng thanh toán điện tử
trong cuộc sống hàng ngày và muốn tận dụng công nghệ NFC để tăng cường tiện
ích và an ninh trong các giao dịch của mình.
Đối tượng mục tiêu của ứng dụng là những người thường xuyên sử dụng thanh toán
điện tử trong cuộc sống hàng ngày, muốn tận dụng công nghệ NFC để tăng cường
tiện ích và an ninh trong các giao dịch của mình. Qua đề tài này, khơng chỉ thúc đẩy
sự tiếp nhận cơng nghệ thanh tốn khơng tiếp xúc tại Việt Nam, mà còn nâng cao
trải nghiệm của người dùng, tạo nên một sự thay đổi tích cực sau thời kỳ đại dịch.
1.3.
-
Mục tiêu
Người dùng có thể thao tác cơ bản như tạo tài khoản, nạp tiền, chuyển
tiền, thanh toán.
-
Chủ hệ thống có thể phát triển dễ dàng với chi phí thấp.
-
Hệ thống gọn nhẹ, an tồn.
-
Có thể mở rộng dễ dàng.
1.3.1. Đối tượng sử dụng
- Người dung điện thoại di động có nhu cầu thanh tốn khơng tiếp xúc.
1.3.2. u cầu
1.3.2.1.
Yêu cầu chức năng
• Đối với người mua
4
o Quản lý tài khoản (đăng nhập, đăng ký,)
o Liên kết ngân hàng
o Nạp tiền, rút tiền, chuyển tiền
o Theo dõi lịch sử chuyển/nhận tiền
o Thanh tốn khơng tiếp xúc (nfc)
1.3.2.2.
•
Yêu cầu phi chức năng
Yêu cầu về giao diện:
-
Giao diện thân thiện, bố cục hợp lý, dễ sử dụng.
-
Giao diện thống nhất, đồng bộ, không gây bất ngờ cho người
sử dụng.
•
•
Màu sắc, vị trí, hiển thị của các component có tính đồng bộ.
u cầu về độ tin cậy, bảo mật:
-
Có sử dụng phân quyền cho từng loại người dùng.
-
Dữ liệu tài khoản người dùng được bảo mật.
-
Dữ liệu không bị xóa hồn tồn, có thể khơi phục lại.
u cầu về độ tương thích:
o Đối với ứng dụng di động:
•
-
Android: hỗ trợ từ phiên bản Android 6.0 trở lên
-
iOS: Hỗ trợ từ phiên bản iOS 12 trở lên
Yêu cầu về khả năng phát triển:
-
Dễ dàng nâng cấp tính năng đã có nhờ vào sự hệ thống hóa
trong khâu xử lý.
•
Dễ dàng mở rộng khi có nhu cầu phát triển.
Yêu cầu về tính hiệu quả:
-
Hệ thống quản lý dữ liệu một cách logic.
-
Hiệu năng ổn định tránh gây khó chịu cho người dùng.
-
Có khả năng chịu tải tốt.
5
-
Khả năng mở rộng tùy chỉnh phụ thuộc theo tình hình tài chính
của chủ sở hữu.
6
CHƯƠNG 2.
2.1.
CƠ SỞ LÝ THUYẾT, TỔNG QUAN CƠNG NGHỆ
Cơng nghệ sử dụng
2.1.1. Flutter
Hình 2.1 Logo Flutter1
Flutter là một framework phát triển ứng dụng di động mã nguồn mở được tạo
ra bởi Google. Ra mắt lần đầu vào tháng 5 năm 2017 tại sự kiện Google Developer
Days ở Shanghai, Flutter đã tạo ra một sự thay đổi lớn trong cách chúng ta phát
triển ứng dụng di động.
So với các công nghệ phát triển ứng dụng khác, Flutter mang đến một số đặc
điểm nổi trội:
- Cross-platform: Flutter cho phép phát triển cả ứng dụng Android và iOS từ
một bộ mã nguồn duy nhất, giảm thiểu thời gian và công sức cần thiết để xây dựng,
kiểm tra và duy trì ứng dụng.
- Hiệu suất cao: Flutter sử dụng ngôn ngữ Dart, một ngôn ngữ chạy "AOT"
(Ahead of Time) để biên dịch trực tiếp vào mã máy, giúp tăng tốc độ khởi chạy và
hiệu suất của ứng dụng.
- Hệ thống widget: Thay vì sử dụng các component có sẵn của hệ điều hành,
Flutter xây dựng giao diện người dùng từ các widget của riêng nó, giúp tạo ra
những ứng dụng có giao diện đẹp và thống nhất trên mọi nền tảng.
1
Nguồn:
7
- Hot Reload: Khả năng này của Flutter giúp lập trình viên thấy được kết quả
của thay đổi mã ngay lập tức mà không cần khởi động lại ứng dụng, tăng năng suất
phát triển đáng kể.
Trong dự án của chúng tôi, Flutter đã được sử dụng để tạo ra một ứng dụng
di động đa nền tảng chạy trên cả iOS và Android. Chúng tôi đã tận dụng đầy đủ các
đặc điểm mạnh của Flutter, từ hiệu suất cao, hệ thống widget mạnh mẽ, cho đến khả
năng hot reload, để xây dựng một ứng dụng chất lượng cao mà vẫn tiết kiệm được
thời gian và nguồn lực.
Một tính năng quan trọng khác của ứng dụng chúng tơi là khả năng thanh
tốn thông qua NFC. Để hỗ trợ chức năng này, chúng tôi đã sử dụng các thư viện
như flutter_nfc_kit và nfc_in_flutter. Nhờ sự hỗ trợ từ những thư viện này, ứng
dụng có thể giao tiếp với các thiết bị hỗ trợ NFC để thực hiện các giao dịch thanh
toán một cách an tồn và thuận tiện.
Flutter khơng chỉ là một cơng cụ phát triển ứng dụng đa nền tảng, mà còn
mang đến một phương pháp mới để xây dựng giao diện người dụng, giúp tạo ra
những ứng dụng thú vị và thu hút người dùng. Cùng với sự hỗ trợ của một cộng
đồng lập trình viên đơng đảo và năng động, Flutter đã nhanh chóng trở thành một
lựa chọn phổ biến trong việc phát triển ứng dụng di động.
Điểm đặc biệt, Flutter khơng chỉ hỗ trợ Android và iOS, mà cịn có thể được
sử dụng để phát triển ứng dụng cho web và desktop, làm cho nó trở thành một cơng
cụ phát triển ứng dụng toàn diện, phù hợp với nhiều nhu cầu và môi trường khác
nhau.
Đặc biệt, Flutter rất thân thiện với các lập trình viên. Ngơn ngữ lập trình Dart
rất dễ học và sử dụng, giúp lập trình viên nhanh chóng làm quen và phát triển ứng
dụng với Flutter. Hơn nữa, tài liệu hướng dẫn của Flutter rất chi tiết và dễ hiểu, giúp
lập trình viên có thể tự học và tìm hiểu về cơng nghệ này một cách hiệu quả.
8
Nhìn chung, nhờ Flutter, chúng tơi đã có thể tạo ra một ứng dụng di động
chất lượng cao mà vẫn tiết kiệm được thời gian và nguồn lực. Sự linh hoạt và thân
thiện của Flutter đã giúp chúng tôi thực hiện được mục tiêu này.
2.1.2. BloC
Hình 2.2 Mơ hình BloC
Mơ hình BLoC (Business Logic Component) là một mơ hình thiết kế được đề xuất
bởi Paolo Soares và Cong Hui từ Google để giúp tách biệt phần giao diện người
dùng (UI) và phần logic xử lý trong ứng dụng Flutter.
BLoC sử dụng luồng dữ liệu reactive (dựa trên Streams) làm trung gian giữa nguồn
dữ liệu và UI, giúp tách rõ ràng giữa UI và logic xử lý, giúp code dễ đọc, dễ quản
lý, dễ test hơn.
Bên dưới là các khái niệm chính trong mơ hình BLoC:
▪ Events: Events là các input cho BLoC. Ví dụ như user interactions,
lifecycle events, vv.
▪ States: States là output của BLoC, thường được UI lắng nghe để cập nhật
giao diện.
▪ BLoC: BLoC nhận events từ Stream, xử lý logic và sau đó map events
thành states, xuất ra từ Stream.
Một BLoC cơ bản sẽ có dạng như sau:
9
Hình 2.3 Ví dụ về BloC
Trong đoạn code trên, BLoC sẽ lắng nghe các events từ _eventController. Khi có
event mới, BLoC sẽ xử lý và tạo ra state mới, sau đó xuất ra từ _stateController. UI
sẽ lắng nghe _stateController để cập nhật giao diện tương ứng với state mới.
Mơ hình BLoC rất mạnh mẽ và linh hoạt, tuy nhiên cũng khá phức tạp đòi hỏi hiểu
biết về Reactive Programming. Để giúp việc sử dụng BLoC dễ dàng hơn, bạn có thể
sử dụng package flutter_bloc hoặc bloc từ Felix Angelov.
10
2.1.3. ExpressJs
Hình 2.4 Logo express,js2
Express.js, thường được gọi là Express, là một framework nhẹ và linh hoạt
cho Node.js, giúp xây dựng các ứng dụng web và API một cách nhanh chóng và dễ
dàng. Được phát triển bởi TJ Holowaychuk, Express ra mắt vào năm 2010 và hiện
là một trong những framework hàng đầu cho Node.js, và cũng là một thành phần
quan trọng của hệ sinh thái JavaScript.
Dưới đây là một số đặc điểm nổi bật của Express.js:
▪ Giản lược và linh hoạt: Express.js cung cấp một lớp trừu tượng hóa
cho Node.js, giúp giảm thiểu đáng kể độ phức tạp khi xây dựng ứng
dụng web hoặc API. Express.js cho phép bạn xử lý yêu cầu HTTP,
cấu hình middleware, quản lý tuyến đường (routing), và xử lý lỗi một
cách dễ dàng và linh hoạt.
▪ Middleware: Khái niệm middleware là trái tim của Express.js.
Middleware là những hàm có quyền truy cập vào đối tượng yêu cầu
(request), đối tượng phản hồi (response), và hàm tiếp theo trong chuỗi
xử lý yêu cầu-phản hồi của ứng dụng. Bằng cách sử dụng middleware,
các lập trình viên có thể tùy chỉnh và mở rộng chức năng của ứng
dụng một cách linh hoạt.
▪ Routing: Express.js cung cấp một cách mạnh mẽ và dễ sử dụng để xác
định các tuyến đường (routes) và phản hồi cho các yêu cầu HTTP đến
các tuyến đường đó. Các phương pháp HTTP như GET, POST,
2
Nguồn:
11
DELETE và PATCH đều được hỗ trợ. Ngoài ra, Express.js cũng hỗ
trợ việc phân chia tuyến đường (route segregation) và parameter
routing, giúp việc quản lý tuyến đường trở nên dễ dàng hơn.
▪ Hiệu năng cao: Express.js được xây dựng trên Node.js, một nền tảng
được biết đến với hiệu suất cao và khả năng mở rộng. Do đó,
Express.js thích hợp cho việc xây dựng các ứng dụng có yêu cầu hiệu
năng cao như các ứng dụng thời gian thực hoặc ứng dụng xử lý dữ
liệu lớn.
▪ Hỗ trợ mạnh mẽ từ cộng đồng: Express.js có một cộng đồng lập trình
viên lớn và năng động. Có hàng nghìn module và thư viện bổ sung có
sẵn từ cộng đồng này, giúp bạn mở rộng chức năng của Express.js để
đáp ứng nhu cầu của dự án của bạn.
▪ Tích hợp tốt với các cơng nghệ khác: Express.js tương thích tốt với
nhiều cơng nghệ khác trong hệ sinh thái JavaScript. Ví dụ, nó là một
phần quan trọng của MERN stack, bao gồm MongoDB, Express.js,
React.js và Node.js.
▪ Tài liệu chi tiết: Express.js có tài liệu hướng dẫn rõ ràng và chi tiết,
giúp lập trình viên có thể tự học và tìm hiểu về cơng nghệ này một
cách hiệu quả.
Nhìn chung, Express.js là một framework mạnh mẽ và linh hoạt cho Node.js,
giúp lập trình viên xây dựng các ứng dụng web và API một cách hiệu quả và dễ
dàng.
12
2.1.4. TypeORM
Hình 2.5 Logo thư viện TypeORM3
TypeORM là một Object-Relational Mapping (ORM) library cho TypeScript
và JavaScript. Library này chạy trên các nền tảng Node.js, Browser, Ionic, Cordova
và Electron, và hỗ trợ các cơ sở dữ liệu SQL-based như MySQL, MariaDB,
PostgreSQL, CockroachDB, SQLite, Microsoft SQL Server, Oracle, SAP Hana, và
WebSQL, cũng như MongoDB, một cơ sở dữ liệu NoSQL.
Dưới đây là một số đặc điểm nổi bật của TypeORM:
▪ Hỗ trợ TypeScript và JavaScript: TypeORM là một trong những ORM
đầu tiên được thiết kế dành riêng cho TypeScript, tận dụng hết các
tính năng nổi bật của TypeScript như Decorators. Tuy nhiên,
TypeORM cũng có thể hoạt động tốt với JavaScript.
▪ Active Record và Data Mapper Pattern: TypeORM cung cấp sự linh
hoạt trong việc lựa chọn giữa Active Record hoặc Data Mapper
pattern, tùy thuộc vào yêu cầu và sở thích cụ thể của dự án.
3
Nguồn:
13
▪ Repository Pattern: TypeORM sử dụng Repository Pattern, nghĩa là
mỗi loại entity có một repository riêng biệt, giúp quản lý tất cả các
thao tác liên quan đến entity đó.
▪ Hỗ trợ cho Transactions: TypeORM cung cấp hỗ trợ cho transactions,
cho phép bạn thực hiện một loạt các thao tác trên cơ sở dữ liệu một
cách an toàn.
▪ Decorators: TypeORM sử dụng decorators để xác định và tùy chỉnh
các models. Cách tiếp cận này giúp code của bạn trở nên sạch sẽ hơn
và dễ đọc hơn.
▪ Tích hợp với các frameworks khác: TypeORM có thể tích hợp mạnh
mẽ với nhiều framework khác như Express.js, koa.js, Nest.js, và nhiều
hơn nữa.
▪ Migrations: TypeORM hỗ trợ migrations, cho phép bạn tạo, chạy và
rollback các phiên bản cơ sở dữ liệu một cách tự động.
▪ Hỗ trợ nhiều cơ sở dữ liệu: TypeORM hỗ trợ nhiều cơ sở dữ liệu SQL
và NoSQL, giúp bạn có thể chọn cơ sở dữ liệu phù hợp nhất với yêu
cầu của dự án.
Một ví dụ về sử dụng TypeORM để tạo model cho một User và sau đó tạo
một User mới:
14
Hình 2.6 Model của User
‘@Entity()’ decorator cho biết đây là một entity có thể được lưu trữ trong
database. ‘@PrimaryGeneratedColumn()’ decorator định nghĩa một cột tự động
tăng và ‘@Column()’ decorator định nghĩa một cột thông thường.
Tạo một User mới và lưu vào cơ sở dữ liệu như sau:
Hình 2.7 Cách sử dụng TypeORM
15
‘createConnection()’: tạo một kết nối mới đến cơ sở dữ liệu.
‘connection.getRepository(User)’ trả về một repository cho User entity, cho phép
bạn thực hiện các thao tác với cơ sở dữ liệu liên quan đến User.
‘userRepository.save(user)’ lưu User mới vào cơ sở dữ liệu.
Nói chung, TypeORM là một ORM mạnh mẽ và linh hoạt, giúp lập trình
viên làm việc với cơ sở dữ liệu một cách dễ dàng và hiệu quả hơn.
2.1.5. Firebase Cloud Messaging
Hình 2.8 Logo Firebase Cloud Messagin
Firebase Cloud Messaging (FCM) là một dịch vụ đám mây miễn phí của
Google giúp bạn gửi thông báo và tin nhắn đến người dùng trên các nền tảng
Android, iOS và Web. FCM thay thế cho dịch vụ Google Cloud Messaging (GCM)
cũ, đồng thời mang lại nhiều tính năng và tối ưu hơn.
Tính năng của Firebase Cloud Messaging
▪ Nhắn tin đa nền tảng: FCM hỗ trợ gửi tin nhắn đến các thiết bị chạy
Android, iOS hoặc là ứng dụng web. Tin nhắn có thể bao gồm
payload dữ liệu tùy chỉnh.
▪ Gửi tin nhắn với các điều kiện phân tích đối tượng: Bạn có thể gửi tin
nhắn đến một nhóm người dùng dựa trên các điều kiện như ngôn ngữ,
phiên bản ứng dụng hoặc quốc gia.
16