Lý do chọn đề tài Ngày nay chứng khoán và thị trường chứng khoán đang ngày càng mở rộng và pháttriển, đi kèm với tốc độ phát triển nhanh chóng của chứng khoán thì công nghệ làmột phần kh
Trang 1ĐẠ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
NGUYỄN HỮU THẮNG
KHÓA LUẬN TỐT NGHIỆP XÂY DỰNG ỨNG DỤNG HỖ TRỢ THEO DÕI THỊ TRƯỜNG CHỨNG KHOÁN CHO NGƯỜI MUA BÁN
CHỨNG KHOÁN
BUILD A STOCK TRACKING APPLICATION TO HELP
INVESTORS TRADE STOCK BETTER
KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM
Trang 2ĐẠ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
NGUYỄN HỮU THẮNG – 16521103
KHÓA LUẬN TỐT NGHIỆP XÂY DỰNG ỨNG DỤNG HỖ TRỢ THEO DÕI THỊ TRƯỜNG CHỨNG KHOÁN CHO NGƯỜI MUA BÁN
CHỨNG KHOÁN
BUILD A STOCK TRACKING APPLICATION TO HELP
INVESTORS TRADE STOCK BETTER
KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM
GIẢNG VIÊN HƯỚNG DẪN THS TRẦN ANH DŨNG
Trang 3THÔNG TIN HỘI ĐỒNG CHẤM KHÓA LUẬN TỐT NGHIỆP
Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định
số ……… ngày ……… của Hiệu trưởng Trường Đại họcCông nghệ Thông tin
Trang 4LỜI CẢM ƠN
Sau hơn 4, 5 năm học tập và rèn luyện tại Trường Đại học Công nghệ Thông tin, được
sự giảng dạy và hướng dẫn tận tình của quý thầy cô, đặc biệt là quý thầy cô trong khoaCông nghệ Phần mềm, em đã gặt hái được những kiến thức bổ ích, có thể áp dụng vàoluận văn cũng như áp dụng trong những chặn đường tương lai
Chúng em xin chân thành cảm ơn các quý thầy cô của Trường Đại học Công nghệthông tin, quý thầy cô của Khoa Công nghệ Phần mềm, đặc biệt là thầy Trần AnhDũng đã hướng dẫn tận tình, và đóng góp ý kiến để em có thể hoàn thành khóa luậntốt nghiệp một cách tốt nhất
Bên cạnh đó, em cũng xin gửi lời cảm ơn đến các bạn cùng khóa, đã có những lời góp
ý, động viên em có thêm động lực thực hiện khóa luận trong khoảng thời gian qua
Trong suốt quá trình em tìm hiểu và thực hiện khóa luận, do sử dụng công nghệ cònkhá mới, thời gian và nhân lực của nhóm có hạn, nên không thể tránh những sai sót
Do đó em rất mong nhận được sự thông cảm và những ý kiến đóng góp chân thành từquý thầy cô và các bạn Một lần nữa, em xin chân thành cảm ơn mọi người
Thành phố Hồ Chí Minh, ngày tháng năm 2021
Nguyễn Hữu Thắng
Trang 5MỤC LỤC
TÓM TẮT KHÓA LUẬN 1
Chương 1 MỞ ĐẦU 2
1.1 Lý do chọn đề tài 2
1.2 Mục tiêu 2
1.3 Phạm vi 2
Chương 2 TỔNG QUAN ĐỀ TÀI 4
2.1 Phương pháp thực hiện 4
2.1.1 Tìm hiểu 4
2.1.2 Đối sánh 4
2.1.3 Phân tích 4
2.1.4 Xây dựng 4
2.2 Kết quả mong đợi 5
2.2.1 Kĩ năng 5
2.2.2 Kiến thức 5
2.2.3 Kết quả 5
2.3 Tìm hiểu đề tài 7
2.3.1 Một số ứng dụng theo dõi chứng khoán 7
2.3.2 Đối sánh 11
2.3.3 Tính khác biệt của đề tài 11
Chương 3 GOOGLE CLOUD PLATFORM & FIREBASE 13
3.1 Google Cloud Platform 13
3.1.1 Tổng quan Google Cloud Platform 13
Trang 63.2 Firebase 15
3.2.1 Tổng quan Firebase 15
3.2.2 Ưu nhược điểm 17
3.2.3 Một số tính năng cung cấp 17
Chương 4 FLUTTER 19
4.1 Flutter tổng quát 19
4.1.1 Giới thiệu 19
4.1.2 Ưu nhược điểm 21
4.1.3 Ngôn ngữ Dart 21
4.2 Bên dưới Flutter 23
4.2.1 Các tầng kiến trúc 23
4.2.2 Cơ chế render 25
Chương 5 XÂY DỰNG HỆ THỐNG 28
5.1 Xác định và phân tích yêu cầu 28
5.1.1 Danh sách các Actor 28
5.1.2 Danh sách các Usecase 28
5.2 Thiết kế cơ sở dữ liệu 42
5.3 Thiết kế kiến trúc hệ thống 57
5.3.1 Kiến trúc ứng dụng Server 59
5.3.2 Kiến trúc ứng dụng Client 63
5.4 Thiết kế giao diện 67
5.4.1 Các màn hình đăng nhập 67
5.4.2 Các màn hình liên kết sàn giao dịch 70
5.4.3 Các màn hình theo dõi chứng khoán 73
Trang 75.4.5 Các màn hình thông báo 87
5.4.6 Màn hình tin nhắn 95
5.4.7 Các màn hình khác 96
5.5 Triển khai hệ thống 99
5.5.1 Server 99
5.5.2 Client 99
Chương 6 KẾT LUẬN 101
6.1 Kết quả đạt được 101
6.2 Thuận lợi và khó khăn 102
6.2.1 Thuận lợi 102
6.2.2 Khó khăn 102
6.3 Hướng phát triển 102
Tài liệu Tiếng Việt 104
Tài liệu Tiếng Anh 104
Trang 8DANH MỤC HÌNH
Hình 2.1 Ứng dụng Stock Alarm 7
Hình 2.2 Ứng dụng Investing.com 8
Hình 2.3 Ứng dụng TradingView 10
Hình 3.1 Google Cloud Platform 13
Hình 3.2 So sánh giữa Backend truyền thống và Firebase 16
Hình 3.3 Firebase 17
Hình 4.1 Flutter - framework hỗ trợ đa nền tảng 20
Hình 4.2 Ngôn ngữ lập trình Dart 22
Hình 4.3 Các tầng kiến trúc của Flutter 24
Hình 4.4 Thư viện đồ họa Skia 26
Hình 5.1 Sơ đồ Use case tổng quát 1 28
Hình 5.2 Sơ đồ Use case tổng quát 2 29
Hình 5.3 Use case về tài khoản 30
Hình 5.4 Use case về nhật ký 32
Hình 5.5 Use case về thông báo 34
Hình 5.6 Use case danh sách theo dõi 36
Hình 5.7 Use case liên kết sàn giao dịch 38
Hình 5.8 Use case xem thông tin cổ phiếu 40
Hình 5.9 Entity Relationship Diagram 42
Hình 5.10 Kiến trúc hệ thống 57
Hình 5.11 Kiến trúc backend cloud functions 59
Hình 5.12 Kiến trúc tổng quan của project Client 63
Trang 9Hình 5.13 Kiến trúc của ứng dụng client 64
Hình 5.14 Màn hình đăng nhập 67
Hình 5.15 Màn hình đăng ký 68
Hình 5.16 Màn hình reset mật khẩu 69
Hình 5.17 Màn hình sàn giao dịch - chưa liên kết 70
Hình 5.18 Màn hình sàn giao dịch - đã liên kết 71
Hình 5.19 Màn hình xem giao dịch của sàn 72
Hình 5.20 Màn hình thông tin S&P 500 trên 73
Hình 5.21 Màn hình thông tin S&P 500 dưới 74
Hình 5.22 Màn hình lọc tin tức 75
Hình 5.23 Màn hình cổ phiếu cụ thể 1 76
Hình 5.24 Màn hình cổ phiếu cụ thể 2 77
Hình 5.25 Màn hình tìm cổ phiếu 78
Hình 5.26 Màn hình danh sách nhật ký 79
Hình 5.27 Màn hình chi tiết nhật ký 1 80
Hình 5.28 Màn hình chi tiết nhật ký 2 81
Hình 5.29 Màn hình chỉnh sửa nhật ký 82
Hình 5.30 Màn hình thêm giao dịch thủ công 83
Hình 5.31 Màn hình thêm giao dịch thông qua sàn 85
Hình 5.32 Màn hình thêm giao dịch thông qua file excel 85
Hình 5.33 Màn hình đính kèm thông báo 86
Hình 5.34 Màn hình thông báo 87
Hình 5.35 Màn hình các thông báo chi tiết 88
Trang 10Hình 5.36 Màn hình tạo thông báo - chọn kiểu thông báo 89
Hình 5.37 Màn hình tạo điều kiện - bước 1 90
Hình 5.38 Màn hình tạo điều kiện - bước 2 91
Hình 5.39 Màn hình tạo điều kiện - bước 3 92
Hình 5.40 Màn hình tạo thông báo - tổng kết 93
Hình 5.41 Màn hình tạo thông báo thành công 94
Hình 5.42 Màn hình tin nhắn 95
Hình 5.43 Màn hình quản lý tài khoản 96
Hình 5.44 Màn hình đăng ký gói thành viên 97
Hình 5.45 Màn hình theme tối 98
Trang 11DANH MỤC BẢNG
Bảng 2.1 Ưu nhược điểm ứng dụng Stock Alarm 8
Bảng 2.2 Ưu nhược điểm ứng dụng Investing.com 9
Bảng 2.3 Ưu nhược điểm ứng dụng TradingView 10
Bảng 3.1 Ưu nhược điểm Google Cloud Platform 14
Bảng 3.2 Ưu nhược điểm Firebase 17
Bảng 4.1 Ưu nhược điểm Flutter 21
Bảng 5.1 Danh sách các Actor 28
Bảng 5.2 Bảng mô tả Use case về tài khoản 31
Bảng 5.3 Bảng mô tả Use case về nhật ký 33
Bảng 5.4 Bảng mô tả Use case về thông báo 35
Bảng 5.5 Bảng mô tả Use case danh sách theo dõi 37
Bảng 5.6 Bảng mô tả Use case liên kết sàn giao dịch 39
Bảng 5.7 Bảng mô tả Use case xem thông tin cổ phiếu 41
Bảng 5.8 Collection User 43
Bảng 5.9 Collection Journal 44
Bảng 5.10 Collection Stock Transaction 45
Bảng 5.11 Collection Option Transaction 46
Bảng 5.12 Collection Alert 47
Bảng 5.13 Collection Price Condition 48
Bảng 5.14 Collection Market Cap Condition 48
Bảng 5.15 Collection P/E Ratio Condition 49
Bảng 5.16 Collection Volume Condition 50
Trang 12Bảng 5.17 Collection Fifty Two Week Condition 50
Bảng 5.18 Collection Percent Change Condition 51
Bảng 5.19 Collection Brokerage 52
Bảng 5.20 Collection Institution 52
Bảng 5.21 Collection Purchase Invoice 53
Bảng 5.22 Collection Subscription Product 54
Bảng 5.23 Collection Product Feature 54
Bảng 5.24 Collection Notification 55
Bảng 5.25 Collection Message 56
Bảng 5.26 Bảng mô tả chi tiết kiến trúc backend cloud functions 62
Bảng 5.27 Bảng mô tả chi tiết kiến trúc ứng dụng client 66
Trang 13DANH MỤC TỪ VIẾT TẮT
STT Từ viết tắt Từ đầy đủ Ý nghĩa
1 STT Số thứ tự Số thứ tự trong bảng
2 API Application
Programming Interface Là phần mềm trung gian để 2ứng dụng giao tiếp với nhau
3 REST Representational State
Transfer Một giao thức giao tiếp giữaclient và server
4 GCP Google Cloud Platform Là một nền tảng đám mây của
Google, cung cấp nhiều dịch vụđám mây hữu ích
Trang 14TÓM TẮT KHÓA LUẬN
Tổng quan đề tài: đặt vấn đề, lý do chọn đề tài, mục tiêu và phạm vi tiếp cận của đềtài
Tìm hiểu, khảo sát các ứng dụng theo dõi thị trường chứng khoán hiện có, so sánh,
và rút ra các điểm mạnh, điểm yếu
Phân tích, lựa chọn các nghiệp vụ cần có của 1 ứng dụng theo dõi thị trường chứngkhoán
Tìm hiểu về ngôn ngữ lập trình Dart, các ưu nhược điểm của Firebase Cloud
Functions, Flutter để áp dụng vào hệ thống
Tìm hiểu về Google Cloud Platform, Firebase để có thể triển khai ứng dụng cũngnhư bảo trì, và phát triển thêm các tính năng về sau
Phân tích, thiết kế kiến trúc hệ thống, thiết kế cơ sở dữ liệu và giao diện ứng dụng
Trang 15Chương 1 MỞ ĐẦU
1.1 Lý do chọn đề tài
Ngày nay chứng khoán và thị trường chứng khoán đang ngày càng mở rộng và pháttriển, đi kèm với tốc độ phát triển nhanh chóng của chứng khoán thì công nghệ làmột phần không thể thiếu với các sàn giao dịch online, website theo dõi và đầu tưchứng khoán, thậm chí là các phần mềm chứng khoán trên các nền tảng di động…Với ý tưởng đem lại sự tiện dụng tối đa cho người chơi chứng khoán, nhóm đã lên ýtưởng xây dựng một ứng dụng theo dõi chứng khoán cho người giao dịch chứngkhoán
1.2 Mục tiêu
Ứng dụng các kiến thức đã có và nghiên cứu thêm về các công nghệ, kỹ thuật lậptrình mới như Flutter, Machine Learning, và mô hình phát triển phần mềm.Hiểu về quy trình phát triển phần mềm thông qua quá trình xây dựng ứng dụng từcác bước viết yêu cầu đến hiện thực ứng dụng
Hiểu thêm về nghiệp vụ của các hệ thống theo dõi chứng khoán
Tạo ra sản phẩm có tính ứng dụng cao và góp phần vào sự phát triển của việc ứngdụng công nghệ trong thực tiễn
Trang 16● Theo dõi các thông số của thị trường chứng khoán mới nhất
● Gợi ý hoạt động mua bán dựa trên thị trường
● Hiển thị trang tin tức cho từng công ty bao gồm cả đánh giá (tích cực haytiêu cực)
● Tạo Alert (thông báo) cho cổ phiếu với các điều kiện để hệ thống thông báotới người dùng (thông qua Email, App notification, Tin nhắn điện thoại) khithỏa điều kiện (ví dụ thông báo khi giá trị cổ phiếu của công ty đạt một mứcnào đó)
● Import thông tin các sàn giao dịch (Brokerage) từ các hệ thống khác(Robinhood) hoặc từ file csv
● Tạo Journal - một tính năng giúp người dùng theo dõi các transaction đã thựchiện (trên các sàn giao dịch khác) và ghi chú vào đó
Trang 17Chương 2 TỔNG QUAN ĐỀ TÀI
o Firebase Cloud Functions
o Google Cloud Platform
o Firestore
Trang 18− Frontend Mobile Application:
Ôn luyện toàn bộ các kiến thức đã được dạy trên trường
Áp dụng những lý thuyết vào thực tiễn, xây dựng một ứng dụng hoàn chỉnh, toàndiện nhất
Học hỏi thêm được những công nghệ mới, làm hành trang chuẩn bị cho tương lai
2.2.3 Kết quả
Hiểu rõ nghiệp vụ của 1 ứng dụng theo dõi chứng khoán
Trang 19Thực hiện đúng với tên gọi đề tài, đủ với những yêu cầu giảng viên đề ra
Đáp ứng được yêu cầu đặt ra khi lên kế hoạch thực hiện
Đáp ứng được yêu cầu nghiệp vụ do sinh viên và giảng viên hướng dẫn cùng thảoluận, trao đổi
Ứng dụng được tạo ra với mức độ hoàn thiện, có thể sử dụng được trong thực tếKiến trúc ứng dụng phải rõ ràng, hợp lý Để sau này ứng dụng dễ bảo trì, phát triểnthêm các tính năng
Quy trình phát triển ứng dụng phù hợp với thực tiễn bên ngoài (Agile, V-model,…)Ứng dụng có độ chịu tải tốt, hiệu năng tốt
Trang 202.3 Tìm hiểu đề tài
2.3.1 Một số ứng dụng theo dõi chứng khoán
2.3.1.1 Stock Alarm
Hình 2.1 Ứng dụng Stock AlarmỨng dụng Stock Alarm cung cấp các tiện ích giúp người dùng có thể cập nhật thịtrường chứng khoán nhanh nhất, ngay cả khi họ không sử dụng ứng dụng thông quatính năng đặt thông báo
Bao gồm các tính năng:
● Theo dõi các thông số chi tiết của các stock trên sàn như giá cổ phiếu, phầntrăm biến động, …
● Theo dõi tin tức mới nhất của các công ty cổ phần trên thị trường
● Đặt điều kiện về thông số cổ phần để ứng dụng thông báo ngay khi đạt tiêuchí
● Thông báo qua cuộc gọi, tin nhắn, email hoặc push notification
Trang 21Ưu điểm Nhược điểm
Đầy đủ các tính năng cơ bản của một
ứng dụng theo dõi chứng khoán
Thông tin cung cấp khá đầy đủ
Giao diện đơn giản, dễ dùng
Là ứng dụng di động nên rất tiện dụng
đối với nhiều đối tượng người dùng
Giao diện chưa được chỉn chu tỉ mỉ,còn nhiều lỗi tồn đọng làm giảm tínhchuyên nghiệp
Số lượng điều kiện cho Alert còn rấthạn chế nên chưa đáp ứng được nhucầu nâng cao
Chỉ có trên nền tảng iOSBảng 2.1 Ưu nhược điểm ứng dụng Stock Alarm
2.3.1.2 Investing.com
Hình 2.2 Ứng dụng Investing.com
Trang 22Ứng dụng Investing.com cung cấp hoàn chỉnh tất cả thông tin cần thiết về thị trườngchứng khoán.
Bao gồm các tính năng:
● Theo dõi gần như toàn bộ các thông tin cần thiết về thị trường chứng khoán
● Hỗ trợ biểu đồ nến chi tiết, phù hợp cho người giao dịch nâng cao
● Hỗ trợ cả thị trường tiền điện tử (cryptocurrency)
● Có tính năng đặt thông báo
Có hỗ trợ theo dõi cả tiền điện tử
Có thể tạo danh sách theo dõi
Có tính năng đặt thông báo
Tính năng đặt thông báo còn khá đơngiản
Quá nhiều quảng cáoBảng 2.2 Ưu nhược điểm ứng dụng Investing.com
Trang 232.3.1.3 TradingView
Hình 2.3 Ứng dụng TradingViewỨng dụng TradingView giúp người dùng có thể xem thông tin thị trường chứngkhoán một cách nhanh nhất, tiện dụng nhất với giao diện và tính năng tối giản.Bao gồm các tính năng:
● Theo dõi thị trường chứng khoán theo thời gian thực
● Hiển thị biểu đồ nến nâng cao với các tính năng phức tạp phù hợp với ngườidùng chuyên gia
Ưu điểm Nhược điểm
Giao diện đẹp, thân thiện với người
Bảng 2.3 Ưu nhược điểm ứng dụng TradingView
Trang 24● Tính năng đặt thông báo là một tính năng quan trọng vì cuộc sống bận rộn,không phải ai trong chúng ta cũng có thể ngồi theo dõi thị trường sát sao Đặtthông báo sẽ giúp người dùng yên tâm đi làm những công việc khác mà vẫnkhông bỏ lỡ những thời điểm quan trọng để đầu cơ Tuy nhiên tính năng nàylại chưa được các ứng dụng khác tập trung nhiều.
● Chỉ là những ứng dụng theo dõi thông tin đơn thuần Trên thực tế, ngườidùng sẽ còn phải dùng những ứng dụng sản giao dịch khác để giao dịchchứng khoán Việc chuyển đổi qua lại giữa ứng dụng giao dịch và ứng dụngtheo dõi có phần gây cản trở cho người dùng
2.3.3 Tính khác biệt của đề tài
Ứng dụng sẽ hướng tới cả 2 đối tượng người dùng đầu cơ là cơ bản và nâng cao.Ứng dụng sẽ là một nơi để người dùng có thể theo dõi tất cả các thông tin cần thiết
về thị trường chứng khoán một cách sát sao nhất
Tập trung hơn vào tính năng đặt thông báo (alert) cổ phiếu bằng cách thêm nhiềuđiều kiện thông báo từ cơ bản đến nâng cao
Thêm tính năng thông báo từ nhiều điều kiện (chained alert), mục đích để ngườidùng đặt nhiều điều kiện cùng lúc cho một thông báo, và chỉ thông báo cho ngườidùng khi tất cả điều kiện được thỏa Phù hợp cho người dùng nâng cao
Trang 25Thêm tính năng viết nhật ký (journal), giúp người dùng có thể ghi chép lại thông tinchứng khoán, lịch sử giao dịch, … Tính năng này được tích hợp để tương tác vớicác tính năng khác của app như đính kèm thông báo (alert) đã tạo, đính kèm giaodịch (transaction).
Tính năng theo dõi danh sách các công ty cổ phần cá nhân kèm theo biểu đồ đườngthu nhỏ (sparkline chart) để tiện việc theo dõi cho người dùng
Tính năng theo dõi các thông tin chi tiết của từng công ty cổ phần, bao gồm biểu đồgiá, bảng báo giá cổ phiếu, tin tức liên quan kèm theo đánh giá, …
Tính năng liên kết tài khoản tới các trang sàn giao dịch để lấy được các thông tin vềgiao dịch, cổ phiếu đang nắm giữ, … Qua đó, việc theo dõi cổ phiếu, giao dịch hiện
có cũng được tập trung ở 1 ứng dụng, mang lại tiện lợi cho người dùng Ngoài ra,các giao dịch được liên kết cũng có thể được thêm vào nhật ký (journal)
Các tính năng tuy nhiều nhưng phải được đơn giản hóa bằng cách chia bố cục hợp
lý trên giao diện, để phù hợp với cả 2 đối tượng người dùng cơ bản và người dùngnâng cao
Trang 26Chương 3 GOOGLE CLOUD PLATFORM & FIREBASE
3.1 Google Cloud Platform
3.1.1 Tổng quan Google Cloud Platform
Google Cloud Platform (GCP), được cung cấp bởi Google, là một bộ dịch vụ điệntoán đám mây chạy trên cùng một cơ sở hạ tầng mà Google sử dụng nội bộ cho cácsản phẩm dành cho user của mình, như Google Search và Youtube
Đúng như tên gọi, GCP cung cấp rất nhiều dịch vụ đám mây (cloud services) nhưcloud computing, data storage, phân tích data (data analysis) và machine learning.GCP, cũng giống như các nhà cung cấp dịch vụ cloud khác (Amazon Web Services,Azure), cung cấp cho ta máy ảo (Virtual Machine - VM) & phần cứng, chứa bêntrong các trung tâm dữ liệu trải rộng khắp thế giới Việc được đặt server ở khắp thếgiới cho phép chúng ta truy cập các dịch vụ với độ trễ và rủi ro thấp
Hình 3.1 Google Cloud Platform
Trang 273.1.2 Ưu nhược điểm
Ưu điểm Nhược điểm
Có tiếng tăm tốt trong cộng đồng
Cam kết chất lượng dịch vụ cao
Được tài trợ bởi Google
Nhiều data center khắp thế giới nên rủi
ro và độ trễ thấp
Google không tập trung cho đối tượngcác dự án lớn và dự án doanh nghiệp nếuđem đi so sánh với các công ty nhưMicrosoft
Các chức năng thiếu sự đổi mới nếu sosánh với Azure hay Amazon WebServices
Bảng 3.1 Ưu nhược điểm Google Cloud Platform
3.1.3 Một số dịch vụ cung cấp
Có rất nhiều lý do ảnh hưởng tới việc tại sao ta nên chọn GCP để làm nhà cung cấpcác dịch vụ đám mây Một trong những lý do chính nhất là số lượng dịch vụ(service) đồ sộ của nó
Một số dịch vụ mà Google Cloud Platform cung cấp
● Compute Engine: Một dịch vụ rất bảo mật và có tính tùy chỉnh, giúp ta tạo
và chạy máy ảo ngay trên cơ sở hạ tầng của Google Cung cấp những loạimáy ảo đã dựng sẵn (pre-built) để có thể bắt tay vào sử dụng nhanh nhất.Những máy ảo này sẽ có số lượng CPU và memory tối ưu nhất, nhưng cũngđồng thời cân bằng chi phí vận hành Ngoài ra chi phí cũng được giảm lênđến 80% nhờ vào việc dùng các instance máy ảo tồn tại ngắn hạn (các máy
ảo chỉ được khởi tạo khi được sử dụng, và sử dụng xong sẽ tự tắt)
● Cloud Databases: Dịch vụ cung cấp các database trên đám mây với số
lượng các loại database đa dạng, phù hợp với mọi nhu cầu sử dụng Nhữngdatabase hỗ trợ bao gồm database quan hệ (Cloud SQL - MySQL,
Trang 28PostgreSQL, SQL Server), database key-value (Cloud Bigtable), databasedocument (Firestore), database in-memory (MemoryStore).
● Cloud Functions: Một dịch vụ Functions as a Service (FaaS) với tính mở
rộng rất cao Mô hình pay-as-you-go cũng tiết kiệm rất nhiều chi phí donhững dự án vừa và nhỏ Điểm đặc biệt của Cloud Functions là không cầnquản lý server do nó là serverless, không cần lo những thứ như độ chịu tảiserver, nâng cấp server Cloud Functions tự động scale theo độ chịu tải Nócòn hỗ trợ sẵn các tính năng giám sát (monitoring), log và debug
● Cloud Storage: Thường bị nhầm với Google Drive, Cloud Storage là một
dịch vụ lưu trữ file với nhiều loại khác nhau phù hợp với nhu cầu củadeveloper Được đặt máy chủ ở khắp nơi trên thế giới nên khả năng tiếp cận,
độ trễ lẫn chi phí đều được tối ưu nhất Ngoài ra độ bền còn đạt mức cực kìcao (99.999% độ bền hằng năm theo tài liệu của Google)
3.2 Firebase
3.2.1 Tổng quan Firebase
Firebase, cũng nằm trong hệ sinh thái của GCP, là một platform hỗ trợ cho mobile
và web applications rất mạnh bằng cách cung cấp cho các ứng dụng một nền tảngbackend với đầy đủ các tính năng như database, data storage, user authentication,analytics, push notification,…
Thông thường, một ứng dụng sẽ có cả Frontend và Backend Phía trên Frontend sẽgọi các API endpoints được cung cấp bởi Backend, và dưới Backend sẽ xử lý côngviệc Tuy nhiên, đối với các ứng dụng sử dụng Firebase, ta có thể loại bỏ hoàn toàntầng Backend, đưa tất cả xử lý lên phía client thông qua Firebase SDK
Trang 29Hình 3.2 So sánh giữa Backend truyền thống và FirebaseFirebase, nếu được tận dụng đúng cách, có thể thay thế hoàn toàn backend serverthông thường với độ scale lên tới hàng triệu users.
Trang 30Hình 3.3 Firebase
3.2.2 Ưu nhược điểm
Ưu điểm Nhược điểm
Đa phần là miễn phí cho nhu cầu sử
dụng cơ bản
Cộng đồng rất lớn mạnh, với số lượng
ứng dụng đang sử dụng Firebase lên tới
hàng triệu
Có nhiều loại database để lựa chọn, bao
gồm Firestore và Realtime Database
Cả 2 đều rất linh hoạt và độ mở rộng
cực kì lớn
Rất dễ để setup những tính năng cơ bản
như user authentication, query database
Hỗ trợ query database còn chưa tốt,nhiều query phức tạp chưa thể thựchiện được đối với Firestore hayRealtime Database
Hỗ trợ Migrate data còn bị hạn chế dodata không được host do ta mà đượchost trên cloud
Tập trung nhiều hơn vào nền tảngAndroid Một số tính năng, ví dụ TestLab, chạy tốt trên Android, nhưng vớiiOS thì mới chỉ ở giai đoạn betaBảng 3.2 Ưu nhược điểm Firebase
3.2.3 Một số tính năng cung cấp
● Authentication: Hệ thống đăng nhập, đăng ký đã được phát triển sẵn, với tất
cả những tính năng cần thiết của một hệ thống xác thực user như đăng nhập
Trang 31bằng điện thoại, đăng nhập qua bên thứ 3 (như Google, Facebook, …), xácthực email, reset mật khẩu,
● Firestore: Database phi quan hệ được tích hợp sẵn, các record được ghi dưới
dạng collection (tương đương với 1 table) và document (tương đương với 1row)
● Cloud Storage: Dùng để chứa những content do người dùng tạo, như hình
ảnh và video Firebase SDK tích hợp thêm lớp bảo vệ của Google khi upload
và download file từ Firebase apps
● Cloud Functions: Là một framework theo dạng serverless, giúp ta định
nghĩa hàm và HTTP requests ở một nơi tương tự như Backend Code sẽ đượclưu ở cloud của Google và chạy trong những môi trường ảo dựng sẵn Takhông cần phải tự quản lý và scale như Backend server thông thường
● Hosting: Cung cấp dịch vụ hosting cho các trang web Chỉ với một lệnh đơn
giản, ta có thể deploy các web apps lên các máy chủ của Google
● Test Lab: Là dịch vụ cloud cung cấp những thiết bị di động được host trên
data center của Google, giúp ta có thể chạy test trên đó bất kì lúc nào Ta cóthể test app trên nhiều điện thoại cùng lúc, ở nhiều config cùng lúc
● Cloud Messaging: Là một giải pháp gửi message cross-platform (Android,
iOS, Web) giúp ta gửi message tới các thiết bị của người dùng miễn phí Sửdụng Cloud Messaging, ta có thể notify tới người dùng dưới nhiều dạng, cóthể là gửi notifications, hoặc cũng có thể là gửi data để ứng dụng xử lý, vìdata của message của thể lên đến 4000 bytes
● Google Analytics: Tính năng miễn phí để cung cấp thông tin chi tiết về việc
sử dụng ứng dụng và mức độ tương tác của người dùng Có thể định nghĩatới 500 events khác nhau để thống kê các loại tương tác của người dùng, từ
đó giúp ta suy ra được hành vi của người dùng, giúp ta đưa ra các quyết địnhkinh doanh chính xác hơn
Trang 32Mục tiêu của Flutter là giúp lập trình viên có thể đưa những sản phẩm ứng dụng vớihiệu suất cao nhất, cùng cảm giác tự nhiên nhất trên từng platform, trong khi vẫnchia sẻ code nhiều nhất có thể.
Trong lúc phát triển ở môi trường development, ứng dụng Flutter được chạy trongmột môi trường ảo (Virtual Machine) cung cấp cơ chế hot reload mà không cầnrecompile hoàn toàn lại Trong môi trường release, ứng dụng Flutter biên dịch trựctiếp qua mã máy, dù là kiến trúc Intel x64 hay ARM, hay cũng có thể là Javascriptnếu được target sang ứng dụng Web Flutter là framework open source cùng giấyphép BSD, với một hệ sinh thái rất mạnh gồm các thư viện bên thứ ba do ngườidùng phát triển để hỗ trợ cho thư viện gốc
Trang 33Hình 4.1 Flutter - framework hỗ trợ đa nền tảng
Trang 344.1.2 Ưu nhược điểm
Ưu điểm Nhược điểm
Giảm tối đa thời gian phát triển ứng
dụng với việc sử dụng cùng codebase
cho nhiều nền tảng Đồng thời giảm
tiền bạc và công sức vì chỉ cần một
team phát triển, thay vì chia ra 2 team
iOS và Android
Tính năng hot reload mạnh mẽ, giúp ta
xem thay đổi sau khi sửa code mà
không cần recompile cả app, giúp rất
nhiều trong việc phát triển, sửa chữa
bug và bảo trì dự án
Render nhanh và hoàn toàn tự do
customize nhờ vào kiến trúc đằng sau
Flutter Flutter giúp ta kiểm soát từng
pixel trên màn hình, xóa bỏ mọi rào cản
giới hạn về render đồ họa
Cộng đồng phát triển mạnh mẽ từng
ngày, framework cũng đang trên đà
phát triển, ví dụ như việc support ổn
định cho website và desktop app thông
qua phiên bản Flutter 2.0 ra mắt đầu
năm 2021
Cả Flutter và ngôn ngữ Dart đều vẫncòn rất mới, chưa hoàn toàn ổn địnhỨng dụng dùng Flutter chưa tối ưuhoàn toàn về mặt dung lượng nên sảnphẩm ứng dụng có phần hơi nặngCảm nhận của ứng dụng Flutter khôngđược hoàn toàn 100% native, vì cơ bảnFlutter không tạo ra các componentnative mà chỉ giả native, do đó vẫn sẽ
có những khác biệt nhỏ so với ứngdụng native
Không có một kiến trúc cụ thể nàotrong việc phát triển ứng dụng Flutter.Điều này có thể tốt với lập trình viênlâu năm nhờ tính tự do, nhưng cũng sẽ
là trở ngại cho người mới khi khôngbiết phải theo kiến trúc chuẩn nào
Cả Flutter và Dart đều được phát triển
và đổi mới thường xuyên Trở ngại củađiều này là việc ta phải bảo trì code liêntục nếu muốn bắt kịp sự phát triển củaFlutter
Bảng 4.1 Ưu nhược điểm Flutter
4.1.3 Ngôn ngữ Dart
Dart, ngôn ngữ lập trình của Flutter, là một ngôn ngữ lập trình hướng đối tượngđược tối ưu cho phía client, giúp phát triển app nhanh chóng trên nhiều nền tảng.Mục tiêu của Dart là mang tới một cung cụ phát triển hiệu quả nhất trong việc pháttriển các ứng dụng đa nền tảng
Dart còn là nền tảng của Flutter Dart cung cấp giải pháp ngôn ngữ lập trình cho cácứng dụng Flutter với rất nhiều chức năng cốt lõi như format, phân tích và kiểm thửcode
Trang 35Hình 4.2 Ngôn ngữ lập trình DartNgôn ngữ Dart là loại ngôn ngữ có kiểu cứng (type safe), sử dụng cách kiểm trakiểu dữ liệu tĩnh (static type checking) để chắc chắn rằng giá trị của biến luôn khớpvới kiểu dữ liệu tĩnh của biến đó Tuy nhiên, cơ chế kiểu dữ liệu của Dart cũng rất
linh hoạt, cho phép ta khai báo kiểu động dạng dynamic, nghĩa là kiểu dữ liệu của
biến lúc này sẽ được kiểm tra ở runtime, thay vì compile time như kiểu dữ liệu tĩnh
Dart còn hỗ trợ sound null safety, nghĩa là giá trị của biến sẽ không thể null trừ khi
ta khai báo nó có thể null Với tính năng này, Dart có thể giảm thiểu tối đa các lỗinull exception khi chạy ở runtime Điểm đặc biệt là, không giống với các ngôn ngữlập trình hỗ trợ null-safe khác, khi biến nào trong Dart được khai báo là không thể
null, thì biến đó sẽ chắc chắn luôn luôn không thể null (đây là ý nghĩa của chữ sound trong cụm từ sound null safety).
Dart có một bộ thư viện gốc rất mạnh mẽ, đáp ứng mọi nhu cầu cơ bản về lập trình:
- Bộ kiểu dữ liệu, danh sách và các hàm chính cho mọi chương trình Dart
(dart:core)
Trang 36- Bộ danh sách hỗ trợ mạnh hơn, gồm queue, linked list, hashmap, và cây nhị
phân (dart:collection)
- Bộ dịch encoder và decoder giúp chuyển đổi giữa các dạng dữ liệu khác nhau,
bao gồm JSON và UTF-8 (dart:convert)
- Bộ hỗ trợ hằng số, hàm và các công thức toán học (dart:math)
- Hỗ trợ xử lý file, socket, HTTP, và đọc ghi (I/O) cho các ứng dụng không
phải web (dart:io)
- Hỗ trợ lập trình bất đồng bộ, với các lớp như Future (tương tự Promise trong
ES6) và Stream (tương tự Observable trong rxjs) (dart:async)
- Hỗ trợ giao tiếp với các ngôn ngữ kiểu C (ví dụ C++) (dart:ffi)
- Lập trình song song sử dụng isolate - các worker độc lập tương tự như
threads nhưng không chia sẻ bộ nhớ, giao tiếp với nhau chỉ thông qua các
message (dart:isolate)
- Cung cấp các element HTML và các công cụ khác để tương tác với trình
duyệt và với DOM (Document Object Model) (dart:html)
4.2 Bên dưới Flutter
4.2.1 Các tầng kiến trúc
Flutter được thiết kế như một kiến trúc phân tầng dễ mở rộng Flutter tồn tại dướidạng một loạt các thư viện độc lập mà mỗi thư viện tương ứng với một tầng Khôngtầng nào có đặt quyền truy cập trực tiếp vào tầng dưới, và mọi phần của frameworkđều là optional và dễ dàng thay thế
Trang 37Hình 4.3 Các tầng kiến trúc của FlutterĐối với các hệ điều hành, các ứng dụng Flutter đều được đóng gói tương tự như cácứng dụng native Một trình nhúng (Embedder) của hệ điều hành cung cấp mộtentrypoint, phối hợp với hệ điều hành để truy cập vào các service như render giaodiện, input và quản lý event loop Trình nhúng được viết bằng các ngôn ngữ tươngứng của hệ điều hành: Java và C++ cho Android, Objective-C/Objective-C++ choiOS và macOS, và C++ cho Windows và Linux Sử dụng trình nhúng, code Flutter
có thể được tích hợp vào các ứng dụng sẵn có dưới dạng một module con, hoặccũng có thể được dùng như một ứng dụng riêng Flutter đã tích hợp sẵn các trìnhnhúng gốc cho từng nền tảng, tuy nhiên vẫn có các trình nhúng khác được phát triển,
ví dụ như go-flutter, một trình nhúng giúp chạy ứng dụng Flutter trên Windows, sử
Trang 38Lõi của Flutter, được gọi làFlutter engine, được viết chủ yếu bằng ngôn ngữ C++
và hỗ trợ các nhu cầu thiết yếu để hỗ trợ đa số các ứng dụng Flutter Engine nàychịu trách nhiệm vẽ tất cả mọi thứ lên màn hình mỗi khi có frame mới cần render
Flutter framework có thể gọi tới engine thông qua thư viện dart:ui (thư viện này
đóng gói các code C++ tương ứng dưới dạng các class của Dart, ví dụ như các class
hỗ trợ việc nhận input, đồ họa và render text)
Thông thường, lập trình viên có thể tương tác với Flutter thông quaFlutter
framework một cách hiện đại và dễ hiểu hơn các tầng dưới, được viết bằng ngôn
ngữ Dart Framework bao gồm một bộ thư viện phong phú về platform, layout, …cũng được phân tầng Đi từ dưới lên, ta sẽ có:
- Tầngfoundation, gồm các class nền tảng như về animation (để animate),
painting (để vẽ đồ họa) và gesture (để nhận tương tác).
- Tầngrendering, gồm các class hỗ trợ cho việc hệ thống layout Với tầng này,
ta có thể xây dựng một cây layout gồm các render object
- Tầngwidget, gồm các class tượng trưng cho những component trên giao
diện Mỗi render object dưới tầng rendering đều có một class tương ứng trêntầng widget Ngoài ra, tầng widget còn giúp ta định nghĩa các class mangtính tái sử dụng, tương tự như Component của React
- Thư việnMaterial và Cupertino, từ các thành phần của tầng widget, giúp ta
gọi và render các thành phần trên giao diện theo chuẩn Material design hoặciOS design
Framework Flutter tương đối nhỏ và cơ bản Nhiều tính năng cao hơn mà ta haydùng đều được đóng gói dưới dạng các package (tương tự các thư viện), bao gồm
các plugin về nền tảng như camera và webview, hay các tính năng chung như http.
Các package này được xây dựng dựa trên phần gốc của Dart và Flutter
4.2.2 Cơ chế render
Điểm đặc biệt nhất của Flutter, là dù đây là một framework chạy đa nền tảng, nhưng
về hiệu năng thì Flutter vẫn sánh ngang với các ứng dụng native Để đạt được điều
Trang 39này, Flutter có một cơ chế render rất đặc biệt, khác với các framework đa nền tảngkhác như React Native.
Các framework đa nền tảng khác như React Native thông thường sẽ render bằngcách tạo ra một tầng abstract bên trên các thư viện UI của Android và iOS để giaotiếp với các thư viện UI đó Code thông thường sẽ được viết bằng các ngôn ngữthông dịch như Javascript, từ đó ngôn ngữ này phải tương tác với các thư viện Javacủa Android hoặc Objective-C của iOS để hiển thị giao diện Việc này dần dần sẽtăng đáng kể chi phí render, đặc biệt là khi sự tương tác giữa UI và app logic trở nênphức tạp
Ngược lại, Flutter giảm thiểu tối đa, thậm chí là hoàn toàn không cần giao tiếp vớithư native để render giao diện Code để render của Flutter sẽ được compile về dạngcode native, rồi từ đó dùng thư việnSkia (một thư viện đồ họa được viết bằng
C/C++, dùng trực tiếp CPU hoặc GPU để vẽ lên giao diện) để render giao diện.Điều này đồng nghĩa với việc, từng pixel trên màn hình giao diện của ứng dụngFlutter đều sẽ được do Flutter quản lý và lập trình viên có thể toàn quyền kiểm soátchúng
Trang 40Flutter còn nhúng một bản sao của Skia vào engine, cho phép lập trình viên có thểnâng cấp ứng dụng sử dụng Flutter để có thể bắt kịp những cập nhật hiệu năng mớinhất, ngay cả khi điện thoại của người dùng chưa nâng cấp phiên bản Android mới.Điều này được áp dụng tương tự với các ứng dụng Flutter trên các platform khácnhư iOS, Windows hay macOS.