Điều này đòi hỏi sự xuất hiện của các ngôn ngữ lập trình tiên tiến và chức năng hơn để phát triển chức năng trang web, chẳng hạn như Golang... Vào giữa năm 2008, hầu hết các tính năng đư
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Giảng viên hướng dẫn:
Thầy Nguyễn Tấn Toàn
Sinh viên thực hiện:
TPHCM, 05/01/2021
Trang 2NHẬN XÉT CỦA GIẢNG VIÊN
……….……….….
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Trang 3Ngoài ra, chúng em cũng cảm ơn các anh, chị, bạn bè và gia đình đã giúp đỡ và tạođiều kiện cho chúng em hoàn tất đồ án 2 này
Mặc dù đã rất cố gắng, tuy nhiên vì khả năng giới hạn nên vẫn không tránh khỏinhững sai sót, chúng em rất mong nhận được sự thông cảm và góp ý chân tình từ quýthầy cô và các bạn Một lần nữa xin được chân thành cảm ơn mọi người
Thành phố Hồ Chí Minh, ngày 05 tháng 01 năm 2021
Thân Lê Anh Tuấn
Trang 4Tô Minh Khuê
Trang 5ĐỀ CƯƠNG CHI TIẾT
TÊN ĐỀ TÀI: Xây dựng website và app bán đồng hồ sử dụng Flutter và
Golang
Cán bộ hướng dẫn: thầy Nguyễn Tấn Toàn
Thời gian thực hiện: Từ ngày 25/09/2020 đến ngày 10/01/2021
Sinh viên thực hiện:
Thân Lê Anh Tuấn 17521223
Tô Minh Khuê 17520653
Nội dung đề tài: Xây dựng website và app bán đồng hồ sử dụng Flutter và Golang
Mục tiêu: Tìm hiểu Golang, các ưu điểm và khuyết điểm Xây dựng ứng dụng bán đồng hồ với giao diện thân thiện
với người dùng và có tiềm năng phát triển.
Đối tượng: Các công ty, doanh nghiệp vừa và nhỏ.
Phương pháp thực hiện: Thảo luận và làm việc nhóm tìm hiểu theo năng lực và kinh nghiệm đã có trong quá trình
học tại trường.
Kết quả mong đợi: Hiểu rõ về Golang và có thể xây dựng được app sử dụng công nghệ Golang.
Kế hoạch thực hiện:
Trang 6- Nó mang lại lợi ích gì ? Cho ai ?
Trong hoàn cảnh nào ?
- Những cái tương đương, tương tự
Sprint 2: Tìm hiểu các mô hình,
công nghệ , kỹ thuật để áp dụng vào
hệ thống
Tuần 3-5(25/09/2020 – 10/10/2020)
Tuấn
Phase 2: Xây dựng back end của hệ thống
bằng golang
9 Tuần(22/10/2020- 20/11/2020)
4 Sprint 4: Xây dựng cơ sở dữ liệu của
hệ thống
4.1 Xây dựng Restful API cho user
module
- CRUD API cho người dùng, admin
Xây dựng Restful API cho product
module
- CRUD API cho danh mục sản phẩm,
sản phẩm
Tuần 8 – 15(22/10/2020 – 20/11/2020)
Tuấn, Khuê
Trang 7đơn hàng
- CRUD API cho giỏ hàng, đơn hàng
của người dùng
Phase 3 : Xây dựng website application cho
người quản lí bằng vue
9 Tuần(20/11/2020- 10/12/2020)
5 Sprint 5: Xây dựng giao diện
5.1
Giao diện trang chủ
- Giao diện đăng nhập
+ Hiển thị giao diện đăng nhập, thông
tin khách hàng, chỉnh sửa tài khoản
- Giao diện hiển thị danh sách khách
hàng
- Giao diện quản lý sản phẩm
- Giao diện quản lí danh mục sản phẩm
- Giao diện quản lí đơn hàng
- Giao diện thống kê đơn hàng
+ Thiết kế, cài đặt giao diện
+ Hiển thị thông tin đồng hồ
+ Xây dựng chức năng thông báo đồng
hồ đã hết, chức năng lưu trữ và chia sẻ
sản phẩm
(10/12/2020- 31/12/2020)
6 Sprint 5: Xây dựng giao diện
6.1 Giao diện trang chủ
+ Thiết kế, cài đặt giao diện
+ Hiển thị danh sách danh mục đồng
hồ, đồng hồ
- Xây dựng chức năng tạo tài khoản
Tuần 8 – 15(10/12/2020 – 31/12/2020)
Tuấn, Khuê
Trang 8- Giao diện quản lý đồng hồ
+ Hiển thị thống báo sự kiện
-Giao diện tìm kiếm đồng hồ
+ Thiết kế, cài đặt giao diện
+ Hiển thị danh mục đồng hồ
-Giao diện bán đồng hồ
+ Thiết kế, cài đặt giao diện
+ Hiển thị thông tin đồng hồ
+ Xây dựng chức năng thông báo đồng
hồ đã hết, chức năng lưu trữ và chia sẻ
sản phẩm
- Giao diện tài khoản
+ Thiết kế, cài đặt giao diện
+ Hiển thị giao diện đăng nhập, thông
tin khách hàng, chỉnh sửa tài khoản
- Giao diện quản lý giỏ hàng
+ Thiết kế, cài đặt giao diện
+ Hiển thị giao diện đồng hồ đã mua
+ Xây dựng chức năng thông báo khi
Tuấn, Khuê
Trang 9STT Công việc Thời gian thực hiện
- Nó mang lại lợi ích gì ? Cho ai ?
Trong hoàn cảnh nào ?
- Những cái tương đương, tương tự
Khuê
2
Sprint 2: Tìm hiểu các mô hình,
công nghệ , kỹ thuật để áp dụng vào
hệ thống
Tuần 3-5(09/04/2020 – 23/04/2020)
Trang 10Tuấn, Khuê
5 Sprint 5: Xây dựng giao diện
5.1 Giao diện trang chủ
+ Thiết kế, cài đặt giao diện
+ Hiển thị đồng hồ bán chạy, đồng hồ
nổi bật
- Xây dựng chức năng tạo tài khoản
- Giao diện quản lý đồng hồ
-Giao diện thông báo sự kiện
+ Thiết kế, cài đặt giao diện
+ Hiển thị thống báo sự kiện
-Giao diện tìm kiếm đồng hồ
+ Thiết kế, cài đặt giao diện
+ Hiển thị danh mục đồng hồ
-Giao diện đồng hồ bán
+ Thiết kế, cài đặt giao diện
+ Hiển thị thông tin đồng hồ
+ Xây dựng chức năng thông báo đồng
hồ đã hết, chức năng lưu trữ và chia sẻ
sản phẩm
Giao diện khách hàng
- Giao diện tài khoản
+ Thiết kế, cài đặt giao diện
+ Hiển thị giao diện đăng nhập, thông
tin khách hàng, chỉnh sửa tài khoản
- Giao diện quản lý giỏ hàng
+ Thiết kế, cài đặt giao diện
Tuần 8 – 15(14/05/2020 – 01/07/2020)
Tuấn, Khuê
Trang 11+ Xây dựng chức năng thông báo khi
Tuấn, Khuê
Trang 12MỤC LỤC
LỜI CẢM ƠN 3
ĐỀ CƯƠNG CHI TIẾT 5
MỤC LỤC 12
DANH MỤC HÌNH VẼ 15
DANH MỤC BẢNG 16
TÓM TẮT BÁO CÁO 17
MỞ ĐẦU 18
CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI 19
1 NHU CẦU THỰC TẾ CỦA ĐỀ TÀI 19
2 CÁC DỰ ÁN ĐỐI THỦ 21
3 PHẠM VI ĐỒ ÁN 22
4 PHƯƠNG PHÁP NGHIÊN CỨU 22
5 CẤU TRÚC ĐỒ ÁN 23
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 23
1 GOLANG 23
1.1 Giới thiệu về Golang 23
1.2 Tính năng nổi bật của Golang 26
1.3 Áp dụng Golang vào xây dựng ứng dụng bán đồng hồ 28
2 VUE.JS 28
2.1 Giới thiệu Vue.js 28
2.2 Tính năng của Vue.js 29
2.3 Áp dụng Vue.js vào xây dựng ứng dụng bán đồng hồ 30
3 FLUTTER 32
3.1 Giới thiệu Flutter 32
1.2 Những tính năng nổi bật của Flutter 37
1.3 Áp dụng Flutter vào xây dựng ứng dụng bán đồng hồ 38
CHƯƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 38
1 MÔ TẢ LẠI ĐỀ TÀI 38
Trang 134 MÔ HÌNH USE CASE 42
4.1 SƠ ĐỒ USE CASE 42
4.2 DANH SÁCH ACTOR 42
4.3 DANH SÁCH CÁC USE CASE 43
4.4 ĐẶC TẢ USE CASE 45
4.4.1 Đặc tả các Use case “Quản lý đăng nhập” 45
4.4.2 Đặc tả các Use case “Quản lý đồng hồ” 49
4.4.3 Đặc tả các Use case “Quản lý danh mục đồng hồ” 52
4.4.4 Đặc tả Use Case “Quản lý User” 54
4.4.5 Đặc tả Use Case “Quản lý giỏ hàng” 56
4.4.6 Đặc tả Use Case “Quản lý hóa đơn” 58
4.4.7 Đặc tả Use case “ thông báo, thống kê” 60
5 MÔ HÌNH LUỒNG DỮ LIỆU 62
5.1 HỆ THỐNG KHÁCH HÀNG 63
5.2 HỆ THỐNG NGƯỜI QUẢN LÝ 67
6 SƠ ĐỒ DỮ LIỆU 72
ĐẶC TẢ DATABASE 72
CHƯƠNG 4: HIỆN THỰC ỨNG DỤNG BÁN ĐỒNG HỒ 76
1 TỔNG QUAN VỀ ỨNG DỤNG BÁN ĐỒNG HỒ 76
2 ĐẶC TẢ GIAO DIỆN ỨNG DỤNG 76
2.1 ỨNG DỤNG WEB 76
2.1.1 QUẢN LÝ ĐĂNG NHẬP 76
2.1.2 QUẢN LÝ SẢN PHẨM 78
2.1.3 QUẢN LÝ DANH MỤC 80
2.1.3 QUẢN LÝ TÀI KHOẢN 82
2.1.4 QUẢN LÝ ĐƠN HÀNG 82
2.1.5 QUẢN LÝ THỐNG KÊ 83
2.2 ỨNG DỤNG MOBILE 84
2.2.1 QUẢN LÝ ĐĂNG NHẬP 84
2.2.2 QUẢN LÝ SẢN PHẨM 88
2.2.3 QUẢN LÝ ĐƠN HÀNG 91
3 CÀI ĐẶT 95
3.1 MÔI TRƯỜNG PHÁT TRIỂN VÀ TRIỂN KHAI 95
3.1.1 Môi trường phát triển phần mềm 95
3.1.2 Môi trường triển khai 95
3.1.3 Yêu cầu phần mềm 95
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 96
Trang 141 KẾT LUẬN 96
2 HƯỚNG PHÁT TRIỂN 97
Trang 15Danh mục hình vẽ
Hình 1 Sơ đồ kiến trúc hệ thống 39
Hình 2 Mô hình phân rã chức năng 41
Hình 3 Sơ đồ Use case 42
Hình 4 Sơ đồ luồng dữ liệu 62
Hình 5 Đăng nhập, đăng xuất và tạo tài khoản 63Hình 6 Thông báo 63
Trang 16Danh mục giao diện
G IAO DIỆN 1 Đ ĂNG NHẬP ( WEB ) 78
G IAO DIỆN 2 H OME ( WEB ) 79
G IAO DIỆN 3 D ANH SÁCH SẢN PHẨM ( WEB ) 80
G IAO DIỆN 4 T HÊM SẢN PHẨM ( WEB ) 80
G IAO DIỆN 5 C ẬP NHẬT SẢN PHẨM ( WEB ) 81
G IAO DIỆN 6 D ANH SÁCH DANH MỤC SẢN PHẨM ( WEB ) 81
G IAO DIỆN 7 T HÊM DANH MỤC SẢN PHẨM ( WEB ) 82
G IAO DIỆN 8 C ẬP NHẬT DANH MỤC SẢN PHẨM ( WEB ) 82
G IAO DIỆN 9 D ANH SÁCH TÀI KHOẢN ( WEB ) 83
G IAO DIỆN 10 Đ ƠN HÀNG ( WEB ) 84
G IAO DIỆN 11 T HỐNG KÊ ( WEB ) 84
G IAO DIỆN 12 P LASH S CREEN ( MOBILE ) 85
G IAO DIỆN 13 ĐĂNG NHẬP ( MOBILE ) 86
G IAO DIỆN 14 T ẠO TÀI KHOẢN ( MOBILE ) 87
G IAO DIỆN 15 H OME (M OBILE ) 88
G IAO DIỆN 16 S ẢN PHẨM CÙNG DANH MỤC ( MOBILE ) 89
G IAO DIỆN 17 T ÌM KIẾM ( MOBILE ) 90
G IAO DIỆN 18 T HÔNG TIN SẢN PHẨM ( MOBILE ) 91
G IAO DIỆN 19 DANH SÁCH SẢN PHẨM TRONG ĐƠN HÀNG ( MOBILE ) 92
G IAO DIỆN 20 T HANH TOÁN THÀNH CÔNG ( MOBILE ) 93
G IAO DIỆN 21 H ÓA ĐƠN ( MOBILE ) 94
G IAO DIỆN 22 C HI TIẾT ĐƠN HÀNG ( MOBILE ) 95
Trang 17Danh mục bảng
B ẢNG 1 DANH SÁCH ACTOR 42
B ẢNG 2 D ANH SÁCH U SE C ASE 43
B ẢNG 3 U SE C ASE ĐĂNG NHẬP 45
B ẢNG 4 U SE C ASE ĐĂNG XUẤT 46
B ẢNG 5 U SE C ASE TẠO TÀI KHOẢN 47
B ẢNG 6 U SE C ASE KIỂM TRA ĐĂNG NHẬP 48
B ẢNG 7 U SE C ASE TRA CỨU ĐỒNG HỒ 48
B ẢNG 8 U SE C ASE THÊM ĐỒNG HỒ 49
B ẢNG 9 U SE C ASE XÓA ĐỒNG HỒ 50
B ẢNG 10 U SE C ASE CẬP NHẬT THÔNG TIN ĐỒNG HỒ 51
B ẢNG 11 U SE C ASE THÊM DANH MỤC ĐỒNG HỒ 52
B ẢNG 12 U SE C ASE XÓA DANH MỤC ĐỒNG HỒ 52
B ẢNG 13 U SE C ASE CẬP NHẬT DANH MỤC ĐỒNG HỒ 53
B ẢNG 14 U SE C ASE QUẢN LÝ USER 54
B ẢNG 15 U SE C ASE XÓA USER 54
B ẢNG 16 U SE C ASE CẬP NHẬT THÔNG TIN USER 55
B ẢNG 17 U SE C ASE THÊM SẢN PHẨM VÀO GIỎ HÀNG 56
B ẢNG 18 U SE C ASE XÓA SẢN PHẨM TRONG GIỎ HÀNG 57
B ẢNG 19 U SE C ASE CHỈNH SỬA SẢN PHẨM TRONG GIỎ HÀNG 57
B ẢNG 20 U SE C ASE THANH TOÁN 58
B ẢNG 21 U SE C ASE QUẢN LÝ HÓA ĐƠN 59
B ẢNG 22 U SE C ASE NHẬN THÔNG BÁO 59
B ẢNG 23 U SE C ASE THỐNG KÊ 60
B ẢNG 24 P RODUCT 72
B ẢNG 25 U SER 72
B ẢNG 26 O RDER 73
B ẢNG 27 C ART 73
B ẢNG 28 C ATEGORY 74
B ẢNG 29 C OLLECTION 74
Trang 18Tóm tắt báo cáo
- 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 đề tài.
- Tìm hiểu Golang.
- Tìm hiểu thực trạng, thị trường, khả năng phát triển của Golang.
- Nghiên cứu các tính năng, kiến trúc, cơ chế hoạt động của Golang.
- Tìm hiểu các cách để xây dựng ứng dụng bằng Golang.
- Trình bày kết luận và hướng phát triển.
Trang 19Mở đầu
Ngày nay, sự thành công của doanh nghiệp phụ thuộc vào tính năng động, sáng tạo
và đặt ra vấn đề làm thế nào để cung cấp cho người dùng những trải nghiệm số tốt nhất.Truyền thông và xã hội càng phát triển càng đòi hỏi các nhà phát triển ứng dụng di độngphải quan tâm nhiều hơn đến định hướng tương lai của ngành công nghiệp di động Hơnnữa, việc làm chủ công nghệ mới và phát triển những giải pháp cho thế hệ tiếp theo củacác thiết bị di động cũng dự báo sẽ đầy thách thức
Để đạt được sự tăng trưởng tối đa và bền vững, mọi tổ chức phải tích hợp các công
nghệ phát triển ứng dụng di động mới nhất Theo báo cáo của Techaheadcorp.com, ngành
công nghiệp phát triển ứng dụng toàn cầu dự kiến sẽ tăng lên 6,3 nghìn tỷ USD vào năm
2021 và các ứng dụng dự kiến sẽ tạo ra doanh thu 935,2 tỷ USD vào năm 2023 Ứngdụng di động đang cải thiện trải nghiệm người dùng bằng cách nhanh chóng và thuậntiện
Trong thế giới phát triển web, sự nhanh nhẹn là một vị vua Các doanh nghiệp cóđược lợi thế cạnh tranh bằng cách các trang web và ứng dụng web của họ phát triểnnhanh hơn với ít chi phí và tài nguyên hơn Hơn nữa, họ không chỉ muốn phát triển webtheo yêu cầu nhanh chóng, nhu cầu cũng rất cao cho khả năng sử dụng tiên tiến và trảinghiệm người dùng liền mạch
Điều này đòi hỏi sự xuất hiện của các ngôn ngữ lập trình tiên tiến và chức năng hơn
để phát triển chức năng trang web, chẳng hạn như Golang
Trang 20CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI
1 NHU CẦU THỰC TẾ CỦA ĐỀ TÀI
Ngôn ngữ Go ban đầu được thiết kế và phát triển bởi một nhóm kĩ sư Google bao
gồm Robert Griesemer, Ken Thompson và Rob Pike vào năm 2007 Mục đích của việc
thiết kế ngôn ngữ mới bắt nguồn từ một số phản hồi về tính chất phức tạp của C++11
và nhu cầu thiết kế lại ngôn ngữ C trong môi trường network và multi-core
Vào giữa năm 2008, hầu hết các tính năng được thiết kế trong ngôn ngữ đượchoàn thành, họ bắt đầu hiện thực trình biên dịch (compiler) và Go runtime với RussCox là nhà phát triển chính Trước năm 2010, ngôn ngữ Go dần dần được hoàn thiện.Vào tháng 9 cùng năm, ngôn ngữ Go chính thức được công bố dưới dạng Open source.Ngôn ngữ Go thường được mô tả là "Ngôn ngữ tựa C" hoặc là "Ngôn ngữ C củathế kỉ 21" Từ nhiều khía cạnh, ngôn ngữ Go thừa hưởng những ý tưởng từ ngôn ngữ
C, như là cú pháp, cấu trúc điều khiển, kiểu dữ liệu cơ bản, thủ tục gọi, trả về, con trỏ,v,v , hoàn toàn kế thừa và phát triển ngôn ngữ C, hình bên dưới mô tả sự liên quan củangôn ngữ Go với các ngôn ngữ khác
Trang 21Phía bên trái sơ đồ thể hiện tính chất concurrency của ngôn ngữ Go được pháttriển từ học thuyết CSP công bố bởi Tony Hoare vào năm 1978 Học thuyết CSP dầndần được tinh chế và được ứng dụng thực tế trong một số ngôn ngữ lập trình như
là Squeak/NewSqueak và Alef, cuối cùng là Go
Chính giữa sơ đồ cho thấy tính chất hướng đối tượng và đóng gói của Go được kếthừa từ Pascal và những ngôn ngữ liên quan khác dẫn xuất từ chúng
Phía bên phải sơ đồ cho thấy ngôn ngữ Go kế thừa và cải tiến từ C, Cũngnhư C, Go là ngôn ngữ lập trình cấp thấp, nó cũng hỗ trợ con trỏ (pointer) nhưng ítnguy hiểm hơn C
Việc khai thác sức mạnh của các bộ xử lý đa lõi và phần cứng thế hệ mới đối vớicác ngôn ngữ hiện có được xem như là việc không thể được Bởi những giới hạn vốn cócủa các ngôn ngữ lập trình trên máy tính như C, C++, Java, Bấy lâu nay, các vấn đề xử
lý đa lõi vẫn là chuyện của hệ điều hành
Google đưa ra ngôn ngữ Go như là một cách tiếp cận khác về vấn đề xử lý đa lõi.Thay vì chỉ có hệ điều hành được phép cấp tài nguyên và xử lý, thì các phần mềm cũng
có thể tương tác trực tiếp với nền tảng đa lõi giúp cho việc xử lý nhanh hơn
Trong thời buổi hiện nay, khi mà công nghệ phát triển, thương mại điện tử ngàycàng phát triển trên thế giới cũng như Việt Nam và dần khẳng định được vị thế củamình trong nền kinh tế thị trường Cùng với đó là sự ra đời của các ngôn ngữ lâptrình cho phép thiết kế và xây dựng các ứng dụng thương mại điện tử dưới nhiềuhình thức khác nhau Và một trong những ứng dụng của thương mại điện tử phổbiến ở nước ta là dịch vụ bán hàng qua mạng internet Dịch vụ này cho phép ngườidùng tìm kiếm chọn lựa sản phẩm để mua, thực hiện giao dịch mà không cần phảitrực tiếp đến cửa hàng, mà chỉ cần sử dụng một thiết bị máy tính có kết nối internet.Tuy nhiên hiện nay dịch vụ này vẫn còn khá mới với nhiều người tiêu dùng nước ta,đặc biệt là những người không có kiến thức về tin học nói chung và thương mạiđiện tử nói riêng Nên hiện giờ các đối tượng chính của thương mại điện tử vẫn chủ
Trang 22yếu là tầng lớp tri thức và học sinh,sinh viên Là những người sinh viên, cũng cóchút kiến thức về tin học cũng như tiếp xúc với thương mại điện tử tuy nhiên đôi lúccũng gặp một số khó khăn trong việc mua bán trên các hệ thống bán hàng qua mạnghiện tại Như hình thức thanh toán, nhận hàng, chất lượng sản phẩm thực tế khôngđược như trên website Sản phẩm mà em hướng tới ởđây là đồng hồ, ngày nay nhu cầu làm đẹp của con người không chỉ dừng lại ở áoquần mà còn là những phụ kiện được đeo trên người và đồng hồ là một trong nhữngtrang sức hết sức phổ biến Nó mang lại cho người dùng vẻ đẹp sang trọng, quý pháicũng như thể hiện sự đẳng cấp cho người đeo
2 CÁC DỰ ÁN ĐỐI THỦ
Đúc kết từ các ưu nhược điểm từ các phần mềm đối thủ trên thị trường, nhóm đãthảo luận và rút ra một số tiêu chí phù hợp với khả năng cũng nhưng thời gian phát triển
dự án Bao gồm các tiêu chí sau:
- Người quản trị có quyền phân cấp cho các user
- Hiển thị danh sách các mặt hàng của cửa hàng để khách hàng xem, lựa chọn vàmua
- Sau khi khách hàng chọn và đặt hàng hàng trực tiếp thì phải hiện lên đơn hàng đểkhách hàng có thể nhập thông tin mua hàng và xem hoá đơn mua hàng
- Chức năng cập nhật, sửa, xoá các sản phẩm, danh mục
- Tiếp nhận kiểm tra đơn đặt hàng của khách hàng Hiển thị đơn đặt hàng
- Thống kê theo tháng/năm, khoảng thời gian
Ngoài các chức năng trên thì trang Web phải được thiết kế sao cho dễ hiểu, giaodiện mang tính dễ dùng đẹp mắt và làm sao cho khách hàng thấy được thông tin cần tìm,
Trang 23Điều quan trọng là phải đảm bảo an toàn tuyệt đối thông tin khách hàng trong quá trìnhđặt mua qua mạng Đồng thời trang Web phải luôn đổi mới, hấp dẫn.
3 PHẠM VI ĐỒ ÁN
Vì phần đa nghiệp vụ của các ứng dụng bán đồng hồ đều gần giống nhau, nên môhình phần mềm này có thể được nhân rộng cho nhiều ứng dụng bán đồng hồ có mục đíchtương tự Sản phẩm này dành cho mọi đối tượng nhằm đáp ứng nhu cầu mua đồng hồ củangười dùng
Trong đồ án này, nhóm chỉ xây dựng một số chức năng của ứng dụng như sau:
1 Tạo và đăng nhập tài khoản
2 Phân quyền cho tài khoản
3 Quản lý thông tin tài khoản
4 Quản lý thông tin đồng hồ
5 Quản lý hóa đơn
6 Thống kê doanh thu
4 PHƯƠNG PHÁP NGHIÊN CỨU
Đồ án sử dụng các phương pháp nghiên cứu hướng đến thực tiễn để phát triển vàhoàn thiện ứng dụng:
– Phân tích, khảo sát hiện trạng về nhu cầu thực tế của người dùng bằng các tài liệukhảo sát và ứng dụng quản lý hiện có trên thị trường hiện nay
– Thu thập thông tin, tìm hiểu và nghiên cứu về các kỹ thuật, công nghệ cần thiết để
hỗ trợ cho việc xây dựng ứng dụng đáp ứng yêu cầu được đưa ra
– Xây dựng ứng dụng dựa trên những kỹ thuật và công nghệ trên, tiến hành kiểm thử
dự án song song với quá trình xây dựng ứng dụng
– Đánh giá và so sánh kết quả đạt được với mục tiêu ban đầu đưa ra Điều chỉnh vàkhắc phục các sự cố
– Hoàn thiện ứng dụng, tiến khành khảo sát, thu thập ý kiến, đánh giá của ngườidùng
Trang 245 CẤU TRÚC ĐỒ ÁN
Báo cáo này được trình bày với cấu khúc đồ án như sau:
- Chương 1: Giới thiệu tổng quan về đề tài, nghiên cứu các dự án hiện có trên hiệntrường, phạm vi nghiên cứu và phương pháp nghiên cứu
- Chương 2: Giới thiệu về các công nghệ, kỹ thuật ứng dụng trong đề tài xây dựng
và phát triển ứng dụng bán đồng hồ này
- Chương 3: Đưa ra các đặc tả yêu cầu và phân tích hệ thống, thiết kế các kiến trúc
và mô hình cần thiết cho toàn bộ hệ thống
- Chương 4: Trình bày tổng quan về ứng dụng bán đồng hồ, giới thiệu giao diện ứngdụng và cách cài đặt sử dụng ứng dụng
- Chương 5: Tổng kết về đồ án, nêu những việc đã đạt được qua quá trình xây dựng
và phát triển đề tài Bên cạnh đó nêu ra những thiếu sót của nhóm Từ đó đưa ra các giảiquyết và hướng phát triển tiếp theo cho ứng dụng bán đồng hồ
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
1 GOLANG
1.1 Giới thiệu về Golang
Trang 25Ngôn ngữ lập trình Go, cũng thường được gọi là Golang, là một ngôn ngữ lậptrình được phát triển bởi một nhóm chuyên gia tại Google Cụ thể ngôn ngữ Golang đượchình thành vào tháng 9 năm 2007 bởi Robert Griesemer, Rob Pike và Ken Thompson.Sau đó Golang Lần đầu tiên được giới thiệu vào tháng 11 năm 2009 và phiên bản đầu tiêncủa nó được phát hành vào tháng 12 năm 2012 Trang web chính thức ngônngữ Golang là http://golang.org/ Ngôn ngữ Golang có một hình thái và ngữ nghĩa lậptrình riêng giúp nó đảm bảo hiệu suất làm việc mà vẫn mang lại những điều thú vị khiviết mã code Golang cũng cung cấp một bộ thư viện chuẩn khá toàn diện Thư việnchuẩn cung cấp tất cả các gói lập trình viên cốt lõi cần để xây dựng các chương trình,phần mềm hay cả ứng dụng web và ứng dụng quản trị mạng Golang cũng là một ngônngữ lập trình đồng bộ, được biên dịch có cú pháp khá cơ bản chủ yếu thuộc về họ ngônngữ C.
Ngôn ngữ lập trình Golang thực chất là một dự án mã nguồn mở được phát hànhdựa trên chứng chỉ BSD nhằm mục đích nâng cao hiệu suất làm việc dành cho các lậptrình viên Golang có cú pháp khá ngắn gọn, sạch sẽ và hiệu quả Go được biên dịchnhanh chóng sang mã máy nhưng vẫn có sự tiện lợi trong việc quản lý bộ nhớ cũng nhưhoạt động run-time Có thể nói Golang là một ngôn ngữ lập trình được biên dịch tĩnh rấtnhanh, cảm thấy giống như một ngôn ngữ kịch bản được biên dịch động
Trang 26dữ liệu do người dùng định tự nghĩa trong Golang Khi tạo các kiểu dữ liệu của riêngvới struct, Chúng ta cần lưu ý rằng Golang không cung cấp hỗ trợ cho thừa kế trong hệthống kiểu dữ liệu của nó, nhưng nó ưu tiên thành phần của các kiểu cho phép bạn tạo cáckiểu dữ liệu lớn hơn bằng cách kết hợp các kiểu nhỏ hơn Triết lý thiết kế của Golang làtạo ra các thành phần lớn hơn bằng cách kết hợp các thành phần nhỏ và mô-đun hóa Nếubạn là một lập trình viên thực dụng, bạn sẽ đánh giá cao triết lý thiết kế của Golang bởiviệc kế thừa kiểu dữ liệu đôi khi đưa ra những thách thức thực tế liên quan đến khả năngbảo trì.
Trong thập kỷ qua, phần cứng máy tính đã phát triển mạnh mẽ giúp gia tăng số lõi cũngnhư nâng cao đột phá sức mạnh của CPU Ngày nay, chúng ta sử dụng nhiều nền tảngđám mây để xây dựng và chạy các ứng dụng, vì vậy các máy chủ trên đám mây có nhiềusức mạnh và quyền lực hơn Mặc dù vậy, chúng ta vẫn chưa thể tận dụng được toàn bộsức mạnh của chúng dựa trên hầu hết các ngôn ngữ và công cụ lập trình hiện có
Ngôn ngữ lập trình Golang ra đời cung cấp khả năng thực thi các chức năng độc lập vớinhau Các cơ chế đồng thời của nó giúp dễ dàng viết các chương trình tận dụng tối các
"lõi" trên CPU cũng như sức mạnh từ mạng máy tính Trong hệ thống kiểu mới của nócho phép xây dựng chương trình linh hoạt và mô đun hóa Một function được tạo đượcquản lý như một goroutine (một luồng thực thi – thread – được quản lý bởi Go-runtime),
nó được coi là một đơn vị công việc độc lập, được lên lịch và sau đó được thực thi trênmột bộ xử lý logic có sẵn Các Goroutine được tạo ra bằng cách gọi câu lệnh Go theo saubởi hàm hoặc phương thức mà bạn muốn chạy như một hoạt động tự điều hành Bộ lậplịch thời gian chạy Go là một phần mềm phức tạp quản lý tất cả các goroutine được tạo
và cần thời gian xử lý Trình lập lịch biểu nằm trên đầu của hệ điều hành, ràng buộc cácluồng của hệ điều hành tới các bộ xử lý logic mà khi đến lượt, nó sẽ tiến hành việc thựcthi các goroutine Bộ lập lịch kiểm soát tất cả mọi thứ liên quan đến các goroutine đangchạy trên đó bộ vi xử lý logic tại bất kỳ thời điểm nào
Các lĩnh vực ứng dụng Golang
Trang 27Golang có thể ứng dụng trong nhiều lĩnh vực, như trong phát triển Web Backend, pháttriển ứng dụng mobile (với vai trò server), trong các hệ thống microservice hay ERP(Enterprise – Resource – Planning) Đối với phát triển Web server, Golang mang lạinhiều lợi ích so với Python hay Java như:
Golang thật sự đơn giản và dễ tiếp cận với cả các lập trình viên hay tester
Sử dụng các thuật toán biên dịch nâng cao, với Golang, chúng ta sẽ không cần càiđặt các dependencies từ server bởi vì Go đã liên kết tất cả các mô-đun cũng nhưcác dependenciesthành một file nhị phân
Golang sử dụng các goroutine riêng biệt giúp tiết kiệm bộ nhớ và nâng cao hiệunăng cho ứng dụng
1.2 Tính năng nổi bật của Golang
Tiện lợi
Go được so sánh với các scripting language (ngôn ngữ kịch bản) như Python vớikhả năng đáp ứng nhiều nhu cầu lập trình phổ biến Một số tính năng này được tích hợpvào trong chính ngôn ngữ, chẳng hạn như “goroutines” là một hàm cho concurrency vàkiểu giống như behavior, ngoài ra các tính năng bổ sung được có sẵn trong các packagethư viện Go chuẩn, như http package của Go Giống như Python, Go cung cấp khả năngquản lý bộ nhớ tự động bao gồm việc garbage collection (dọn file rác)
Go biên dịch (compile) code ra nhị phân một cách nhanh chóng.
Trang 28Các file executable được tạo bằng toolchain của Go có thể hoạt động độc lập mà không cần external dependencies mặc định Toolchain hỗ trợ cho nhiều hệ điều hành, hardware platform (chuẩn phần cứng của máy tính) khác nhau và có thể được sử dụng để biên dịch các chương trình nhị phân qua các nền tảng.
Khả năng tương thích
Go cung cấp tất cả những điều trên mà không bị mất quyền truy cập vào hệ thống bên dưới (underlying system) Phương mềm Go có thể liên kết với thư viện C bên ngoài hoặc thực hiện các lệnh call hệ thống native Ví dụ trong Docker, Go interface với các chức năng Linux low-level, cgroups và namespace , để hoạt động với container
Hỗ trợ
Toolchain Go có sẵn dưới dạng binary của Linux, MacOS hoặc Windows hoặc như
là một container trong Docker Go được đặt mặc định trong nhiều bản phát hành phổ biến của Linux, như Red Hat Enterprise Linux và Fedora, giúp cho việc triển khai Go source trở nên dễ dàng hơn đối với các nền tảng trên Go cũng hỗ trợ mạnh mẽ cho nhiều
development environment (môi trường phát triển) của bên thứ ba, từ Microsoft Visual Studio Code đến Komodo IDE của ActiveState
1.3 Áp dụng Golang vào xây dựng ứng dụng bán đồng hồ
Ngôn ngữ lập trình Golang thực chất là một dự án mã nguồn mở được phát hành dựatrên chứng chỉ BSD nhằm mục đích nâng cao hiệu suất làm việc dành cho các lập trìnhviên Golang có cú pháp khá ngắn gọn, sạch sẽ và hiệu quả Go được biên dịch nhanhchóng sang mã máy nhưng vẫn có sự tiện lợi trong việc quản lý bộ nhớ cũng như hoạt
động run-time Có thể nói Golang là một ngôn ngữ lập trình được biên dịch tĩnh rất nhanh,
cảm thấy giống như một ngôn ngữ kịch bản được biên dịch động Sử dụng Golang trongứng dụng này đem lại một số lợi thế nhất định như:
Trang 29- Ngôn ngữ thông dịch: thực thi lệnh trực tiếp và tự do mà không cần biên dịch
trước chương trình sang lệnh ngôn ngữ máy
- Trình biên dịch Go: cung cấp các lợi ích bổ sung như có thể kiểm tra lỗi, triển
khai dễ dàng hơn và khả năng tối ưu hóa mã của lập trình viên để đạt hiệu quả
- Biên dịch chéo: khả năng biên dịch chéo ứng dụng để chạy trên một máy khác với
ứng dụng được sử dụng để phát triển
- Khả năng mở rộng: có nhiều tính năng tích hợp được thiết kế để xử lý nhiều tác
vụ cùng một thời điểm, đáng chú ý là tính năng Goroutines
2 VUE.JS
2.1 Giới thiệu Vue.js
Vue.js, gọi tắt là Vue là một framework linh động dùng để xây dựng giao diệnngười dùng (user interfaces - UI) Khác với các framework nguyên khối, Vue được thiết
kế từ đầu theo hướng cho phép và khuyến khích việc phát triển ứng dụng theo các bước.Khi phát triển lớp giao diện, người dùng chỉ cần dùng thư viện lõi (core library) của Vue,vốn rất dễ học và tích hợp với các thư viện hoặc dự án có sẵn Cùng lúc đó, nếu kết hợp
Trang 30với những kĩ thuật hiện đại như SFC (single file components) và các thư viện hỗ trợ, Vuecũng đáp ứng được dễ dàng nhu cầu xây dựng những ứng dụng đơn trang (SPA - SinglePage Applications) với độ phức tạp cao.
Vue đã được tạo ra và phát triển bởi Evan You khi ông đang làm kỹ sư tại công tyGoogle Lúc Evan đang sử dụng Angular cho một số dự án khác thì đã có phát biểu rằng:
“Điều gì sẽ xảy ra như trích một phần mà mình thích về Angular rồi xây dựng thêm mộtcái gì đó nhẹ nhàng hơn mà không cần phải chú ý đến những khái niệm bổ sung” Đây làphát biểu được xem là bước đệm giúp cho Vue đã và đang có mặt tại thời điểm hiện tại
Vue đã được phát hành vào đầu năm 2014 và dự án này đã được tăng tải lên HackerNew,Echo Js ngay trong ngày đầu tiên ra mắt
2.2 Tính năng của Vue.js
Hỗ trợ cho giao thức lặp với v-for
Khi được triển khai, cho phép mọi loại đối tượng được lặp lại bằng cách sửdụng for of Hiện tại, v-forchỉ thị của Vue có thể lặp lại các mảng và các đối tượng đơngiản, nhưng không phải các đối tượng hoặc kiểu dữ liệu lặp lại khác
Mẫu đa gốc
Vue có một giới hạn trong đó các mẫu yêu cầu một nút gốc duy nhất
Refs phản ứng
Một khía cạnh thiết kế thiết yếu của các thành phần Vue là chúng phải được cách ly
và giao tiếp bằng các đạo cụ và sự kiện Tuy nhiên, đôi khi bạn cần một thành phần để cóthể biến đổi trạng thái của thành phần khác Sử dụng các ref, giúp cho một thành phầnthoát ra khỏi mô hình dữ liệu của thành phần khác Tuy nhiên, khi được truy cập qua ref,
mô hình dữ liệu của thành phần không phản ứng nên không thể xem hoặc đưa vào thuộc
Trang 31Công cụ v-model
Sử dụng lệnh v-modelđể tạo liên kết dữ liệu hai chiều trên đầu vào biểu mẫu
Gói cho trình kết xuất tùy chỉnh
Trình kết xuất của Vue được mã hóa cứng cho các phần tử HTML, vì Vue ban đầuchỉ nhằm mục đích sử dụng trên web Ý tưởng của tính năng này là tách biệt trình kếtxuất HTML khỏi gói Vue chính
2.3 Áp dụng Vue.js vào xây dựng ứng dụng bán đồng hồ
Kích thước nhỏ gọn
Tỷ lệ thành công của JavaScript framework sẽ phụ thuộc vào kích thước của nó.Kích thước càng nhỏ thì công năng sử dụng càng nhiều, người dùng sẽ không mất thờigian để tải xuống và sử dụng
Dễ dàng để tìm hiểu và phát triển Ứng dụng
Nhờ cấu trúc đơn giản của vue.js, người dùng có thể dễ dàng thêm phần mềm vào
dự án website đang thực hiện của mình Cả hai mô hình quy mô nhỏ cũng như quy môlớn đều có thể được phát triển thông qua framework này, do đó tiết kiệm rất nhiều thờigian
Tích hợp đơn giản
Dễ dàng trong quá trình tích hợp với các ứng dụng hiện có Sự tiện lợi này xuất phát
từ vue.js được xây dựng dựa trên JavaScript framework và do đó, có thể tích hợp đượcvào các ứng dụng khác xây dựng trên JavaScript tương đối đơn giản
Vue có thể tạo cấu trúc project nhanh chóng
Nhờ vào command line interface
Tài liệu chi tiết
Trang 32Các tài liệu liên quan đến Vue.JS đều rất đầy đủ và rất chi tiết, Bạn chỉ cần biết sơqua về JavaScript hay HTML là đã có thể phát triển các ứng dụng hoặc trang web củachính mình
Tính linh hoạt
Vue.JS còn cho phép người dùng viết mẫu trong các tệp HTML hay JavaScript sửdụng dựa vào các Node ảo Nó còn giúp cho các chương trình đơn giản chạy trực tiếp từtrình duyệt Nhờ tính năng linh hoạt này, mà nó còn giúp cho các nhà lập trình phát triểnthêm React.JS, Angular.JS và một số framework mới trong JavaScript có cấu trúc dễhiểu
Khả năng giao tiếp hai chiều
Nhờ có cấu trúc MVVM (Model-View-ViewModel) mà việc giao tiếp hai chiềuđược thực hiện dễ dàng trong quá trình xử lý các HTML block
Trang 333 FLUTTER
3.1 Giới thiệu Flutter
Flutter được Google giới thiệu là một người mới trong thế giới ứng dụng di động Làmột SDK mới của Google dành cho các thiết bị di động giúp developers và designers xâydựng nhanh chóng ứng dụng dành cho các thiết bị di động (Android, iOS) Flutter là dự án
mã nguồn mở đang trong giai đoạn thử nghiệm Flutter bao gồm Reactive framework vàcông nghệ hiển thị 2D (2D rendering engine)và các công cụ phát trển(development tool).Các thành phần này làm việc cùng nhau giúp ta thiết kế, xây dựng, test, debug ứng dụng.Không có gì ngạc nhiên khi Flutter giúp các nhà phát triển tạo ra các ứng dụng native đẹpmắt và giúp họ phát triển các ứng dụng đa nền tảng một cách dễ dàng
Kiến trúc high-level của Flutter
Trang 34Khi chúng ta dùng Dart để viết một app Flutter thì tức là chúng ta đang dùng đếntầng Framework của kiến trúc (màu xanh lá).
Tầng Framework sẽ giao tiếp với tầng Engine (xanh dương) thông qua một lớp abstract gọi là Window Lớp abstract này sẽ cung cấp một tập các API để giao tiếp, một cách không trực tiếp, với thiết bị
Cũng thông qua lớp abstract này mà tầng Engine sẽ có hành động notify tầng Framework khi có các sự kiện sau:
Cấu hình thiết bị thi thay đổi (orientation, setting, trạng thái chạy của ứng dụng…)
Có tương tác của user với màn hình (gesture)
Platform channel truyền dữ liệu lên tầng Framework
Và phần lớn là khi tầng Engine sẵn sàng để render frame mới
Framework
Trang 35Đây là lớp framework được xây dựng sẵn bởi Dart, trong đó có một số library điển hình
Thư viện này được xây dựng dựa trên các library gồm core dart
libraries và physics library
Trang 36Một số lớp điển hình là TextPainter được sử dụng để painting text hay Decoration (hay cụ thể là BoxDecoration) để vẽ khung/hộp,
Rendering Tree là hệ thống layout cấp thấp (low-level) và painting được tổ chức dưới dạng Tree Object, với những object là lớp kế thừa của RenderObject
Widget được xây dựng theo dạng cây với những object là lớp kế thừa của RenderObject, cho nên cũng có thể nói widget là một dạng TreeObject Thông thường thì developer không cần phải làm việc trực tiếp với RenderObject mà sẽ làm việc thông qua widget
Widgets
Flutter Widget được xây dựng bởi Dart và lấy cảm hứng từ React
Trang 37Widget có 2 dạng là StatefulWidget và StatelessWidget
Những kiến thức theo tôi nếu bạn đã có thì rất dễ để tiếp cận với Flutter widget
gồm: React Component, Dumb and Smart Component, FlexBox
Trang 38Nhìn qua là có thể thấy, layer này có nhiệm vụ giao tiếp với các platform của thiết
bị ( Android, iOS, ) Tầng này giúp cho chương trình có thể chạy trên nhiều nền tảngnhư windows, linux, web,…
Engine
Đây là layer viết bằng C và C++, nó hỗ trợ cho việc rending ở tầng thấp bằng việc
sử dụng thư viện đồ hoạ Skia của Google, thực thi các core libary của Flutter bao gồm :
Ngoài ra nó còn có nhiệm vụ giao tiếp với các platform SDKs của Android vàiOS
1.2 Những tính năng nổi bật của Flutter
Một số tính năng nổi bật của Flutter như:
- Phát triển ứng dụng nhanh chóng: Tính năng hot reload của Flutter giúp bạn nhanhchóng và dễ dàng thử nghiệm, xây dựng giao diện người dùng, thêm tính năng và sửa lỗinhanh hơn Trải nghiệm tải lại lần thứ hai, mà không làm mất trạng thái, trên emulator,simulator và device cho iOS và Android
- UI đẹp và biểu cảm: Thỏa mãn người dùng của bạn với các widget built-in đẹpmắt của Flutter theo Material Design và Cupertino (iOS-flavor), các API chuyển độngphong phú, scroll tự nhiên mượt mà và tự nhận thức được nền tảng
- Framework hiện đại và reactive: Dễ dàng tạo giao diện người dùng của bạn vớiframework hiện đại, reactive của Flutter và tập hợp các platform, layout và widget phongphú Giải quyết các thách thức giao diện người dùng khó khăn của bạn với các API mạnh
mẽ và linh hoạt cho 2D, animation, gesture, hiệu ứng và hơn thế nữa
- Truy cập các tính năng và SDK native: Làm cho ứng dụng của bạn trở nên sốngđộng với API của platform, SDK của bên thứ ba và native code Flutter cho phép bạn sửdụng lại mã Java, Swift và ObjC hiện tại của mình và truy cập các tính năng và SDKnative trên iOS và Android
Trang 39- Phát triển ứng dụng thống nhất: Flutter có các công cụ và thư viện để giúp bạn dễdàng đưa ý tưởng của mình vào cuộc sống trên iOS và Android Nếu bạn chưa có kinhnghiệm phát triển trên thiết bị di động, thì Flutter là một cách dễ dàng và nhanh chóng đểxây dựng các ứng dụng di động tuyệt đẹp Nếu bạn là một nhà phát triển iOS hoặcAndroid có kinh nghiệm, bạn có thể sử dụng Flutter cho các View của bạn và tận dụngnhiều code Java / Kotlin / ObjC / Swift hiện có của bạn.
1.3 Áp dụng Flutter vào xây dựng ứng dụng bán đồng hồ
Flutter là một SDK của Google dành cho mobile app, là sự kết hợp của mộtframework, widgets và tools, giúp cho lập trình viên có thể xây dựng giao diện mobileđẹp hơn, dễ dàng hơn trên cả 2 nền tảng IOS và Android Sử dụng Flutter trong ứng dụngnày đem lại một số lợi thế nhất định như:
- Biên dịch nhanh: khi dùng Flutter có thể thay đổi code của mình và hoàn toàn có
thể xem kết quả trong thời gian thực giúp tang năng suất tối đa
- Nhanh chóng hiện thực hóa ý tưởng: khi làm việc trên Fltutter tiết kiệm được thờigian nên sớm hoàn thành sản phẩm
- Giao diện đẹp: có thể dễ dàng sử dụng các tiện ích do Flutter cung cấp, để tạo UI
có giá trị hơn ta cá nhân hóa nó
CHƯƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
1 MÔ TẢ LẠI ĐỀ TÀI
Bài toán được đặt ra ở đây là xây dựng một ứng dụng bán đồng hồ dành cho mọingười dùng có nhu cầu mua đồng hồ một cách dễ dàng và thuận tiện nhất Bao gồm một
số chức năng như sau:
1 Tạo và đăng nhập tài khoản
Trang 402 Phân quyền cho tài khoản.
3 Quản lý thông tin tài khoản
4 Quản lý thông tin đồng hồ
5 Quản lý hóa đơn
6 Thống kê doanh thu
2 KIẾN TRÚC HỆ THỐNG
Hình 1 Sơ đồ kiến trúc hệ thống
3 MÔ HÌNH PHÂN RÃ CHỨC NĂNG
Mô hình phân rã chức năng cho phép xác định phạm vi các chức năng được xây dựng
và phát triển trong ứng dụng, cho phép người sử dụng có một cái nhìn tổng thể về các