Kết quả mong đợi: Sau khi xác định đề tài và nghiên cứu, tìm hiểu thực tế, nhóm đã xây dựng ý tưởng thiết kế ứng dụng đọc báo đạt được những tiêu chí sau: Đối với người dùng: Đối với
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
VÕ MINH ĐÔN - 18520608 TRẦN CÔNG NAM - 18521131
ĐỒ ÁN 2 ỨNG DỤNG TỔNG HỢP TIN TỨC
News aggregator application
KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM
GIẢNG VIÊN HƯỚNG DẪN
TS HUỲNH NGỌC TÍN
TP HỒ CHÍ MINH, 2021
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
VÕ MINH ĐÔN - 18520608 TRẦN CÔNG NAM - 18521131
ĐỒ ÁN 2 ỨNG DỤNG TỔNG HỢP TIN TỨC
News aggregator application
KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM
GIẢNG VIÊN HƯỚNG DẪN
TS HUỲNH NGỌC TÍN
TP HỒ CHÍ MINH, 2021
Trang 3MỤC LỤC
ĐỀ CƯƠNG CHI TIẾT 1
CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI 6
1.1 Giới thiệu về đề tài 6
1.1.1 Tìm hiểu về tin tức 6
1.1.2 Tìm hiểu về tổng hợp tin tức 7
1.1.3 Lý do chọn đề tài 7
1.2 Khảo sát hiện trạng 8
1.3 Đối tượng nghiên cứu 8
1.4 Phạm vi nghiên cứu 8
1.5 Phương pháp nghiên cứu 8
1.6 Nhiệm vụ của đề tài 8
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 10
2.1 Tổng quan về Flutter 10
2.1.1 Khái niệm 10
2.1.2 Kiến trúc của Flutter 10
2.1.3 Widget 13
2.1.4 Ưu điểm 14
2.1.5 Nhược điểm 14
2.1.6 Tại sao lại chọn Flutter ? 15
2.2 Tổng quan về Dart 15
2.2.1 Khái niệm 16
2.2.2 Đặc điểm 16
Trang 42.2.3 Ưu điểm 16
2.2.4 Nhược điểm 17
2.3 Tổng quan về Firebase 18
2.3.1 Khái niệm 18
2.3.2 Kiến trúc 18
2.3.3 Các chức năng chính 19
2.3.4 Ưu điểm 20
2.3.5 Nhược điểm 20
2.3.6 Tại sao chọn Firebase? 20
2.4 Giới thiệu về chuỗi JSON 21
2.4.1 Khái niệm chuỗi JSON 21
2.4.2 Cấu trúc chuỗi JSON 21
2.4.3 Các trường nên dùng JSON 21
2.5 Giới thiệu về HTML 22
2.5.1 Tổng quan 22
2.5.2 Các thẻ trong HTML 22
2.6 Giới thiệu về MongoDB 27
2.6.1 Tổng quan về MongoDB 27
2.6.2 Các chức năng chính MongoDB 27
2.6.3 Ưu điểm MongoDB 28
2.6.4 Nhược điểm MongoDB 28
2.6.5 Tại sao nên chọn MongoDB 28
2.7 Giới thiệu về NodeJs 29
2.7.1 Khái niệm 29
Trang 52.7.2 Ưu điểm 29
2.7.3 Nhược điểm 29
2.8 Tổng quan về Python 29
2.8.1 Khái niệm 29
2.8.2 Ưu điểm Python 30
2.8.3 Nhược điểm Python 30
2.8.5 Giới thiệu Beautifulsoup4 30
CHƯƠNG 3 THU THẬP TIN TỨC 31
3.1 Quá trình thực hiện 31
3.1.1 Thu thập đường dẫn 31
3.1.2 Trích xuất nội dung 33
3.1.3 Chuẩn hóa dữ liệu 35
3.1.4 Đưa dữ liệu lên cơ sở dữ liệu 36
3.1.5 Tổ chức cơ sở dữ liệu 37
3.2 Đánh giá 38
CHƯƠNG 4 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 39
4.1 Đặc tả yêu cầu 39
4.1.1 Xác định yêu cầu hệ thống 39
4.1.2 Phân tích yêu cầu hệ thống 39
4.1.3 Phạm vi hệ thống 40
4.1.4 Kiến trúc hệ thống 41
4.2 Thiết kế dữ liệu 41
4.2.1 Bảng News 42
4.2.2 Bảng User 42
Trang 64.2.3 Bảng Recents 44
4.2.4 Bảng Favorites 44
4.3 Sơ đồ Use-case 45
4.3.1 Danh sách các Actor 45
4.3.2 Sơ đồ Use-case tổng quát 46
4.3.3 Đặc tả một số Use-case chính 46
4.4 Thiết kế giao diện 53
4.4.1 Sơ đồ màn hình liên kết 53
4.4.2 Danh sách màn hình 54
4.5 Mô tả chi tiết mỗi màn hình 55
4.5.1 Màn hình “Giới thiệu” 55
4.5.2 Màn hình “Đăng nhập” 56
4.5.3 Màn hình “Đăng ký” 57
4.5.4 Màn hình “Người dùng” 58
4.5.5 Màn hình “Chính” 60
4.5.6 Màn hình “Xu hướng” 61
4.5.7 Màn hình “Thông báo” 62
4.5.8 Màn hình “Chi tiết bài báo” 63
4.5.9 Màn hình “Gần đây” 64
4.5.10 Màn hình “Ưa thích” 65
4.5.11 Màn hình “Thời tiết” 66
4.5.12 Màn hình “Lịch việt” 67
4.5.13 Màn hình “Kết quả xổ số” 68
4.6 Sơ đồ tuần tự 69
Trang 74.6.1 Đăng nhập 69
4.6.2 Đăng ký 70
CHƯƠNG 5 KẾT LUẬN 71
5.1 Đánh giá 71
5.2 Kết quả đạt được 71
5.2.1 Ưu điểm 71
5.2.2 Nhược điểm 72
5.2.3 Hướng phát triển 72
CHƯƠNG 6 TÀI LIỆU THAM KHẢO 73
Trang 8DANH MỤC HÌNH ẢNH
Hình 2 1: Kiến trúc của Flutter 11
Hình 2 2: Kiến trúc của Firebase 18
Hình 3 1: Thông tin đường dẫn trong HTML 31
Hình 3 2: Code để lấy đường dẫn 32
Hình 3 3: Kết quả chạy code lấy đường dẫn 32
Hình 3 4: Code trích xuất nội dung 34
Hình 3 5: Kết quả chạy code trích xuất 35
Hình 3 6: File csv trước khi chuẩn hóa 36
Hình 3 7: File csv sau khi chuẩn hóa 36
Hình 3 8: Import file trong MongoDB 37
Hình 3 9: Kết quả sắp xếp trong MongoDB 37
Hình 4 1: Mô hình kiến trúc hệ thống 41
Hình 4 2: Sơ đồ Use-case tổng quát 46
Hình 4 3: Sơ đồ màn hình người dùng 53
Hình 4 4: Màn hình giới thiệu 55
Hình 4 5: Màn hình đăng nhập 56
Hình 4 6: Màn hình đăng ký 57
Hình 4 7: Màn hình người dùng 58
Hình 4 8: Màn hình “Chính” 60
Hình 4 9: Màn hình “Xu hướng” 61
Hình 4 10: Màn hình thông báo 62
Hình 4 11: Màn hình “Chi tiết bài báo” 63
Hình 4 12: Màn hình “gần đây” 64
Hình 4 13: Màn hình “Ưa thích” 65
Hình 4 14: Màn hình “Thời tiết” 66
Trang 9Hình 4 15: Màn hình “Lịch việt” 67
Hình 4 16: Màn hình kết quả xổ số 68
Hình 4 17: Bảng mô tả chi tiết sơ đồ tuần tự đăng nhập 69
Hình 4 18: Bảng mô tả chi tiết sơ đồ tuần tự đăng ký 70
LỜI CẢM ƠN
Trang 10Nhóm xin gửi lời cảm ơn và lòng biết ơn sâu sắc nhất tới thầy Huỳnh Ngọc Tín, người đã trực tiếp tận tình hướng dẫn nhóm em trong suốt quá trình thực hiện đồ án
2 Không chỉ gợi ý và tận tâm hướng dẫn chúng em trong quá trình tìm hiểu, đọc tài liệu, thầy còn tận tình chỉ bảo em những kĩ năng phân tích, khai thác tài liệu để có được những tư liệu phù hợp với nội dung của khóa luận Hơn nữa, thầy còn rất nhiệt tình trong việc đốc thúc quá trình viết báo cáo, đọc và đưa ra những nhận xét, góp ý
để em có thể hoàn thành đồ án 1 một cách tốt nhất Nếu không có những lời hướng dẫn, dạy bảo của thầy thì bài thu hoạch này rất khó có thể hoàn thiện được Một lần nữa, em xin chân thành cảm ơn thầy
Đề tài được nhóm thực hiện trong khoảng thời gian 3 tháng nên bước đầu đi vào thực tế, tìm hiểu về lĩnh vực trong nghiên cứu khoa học, kiến thức cũng như kinh nghiệm thực tiễn của em còn hạn chế và còn nhiều bỡ ngỡ Do vậy, không tránh khỏi những thiếu sót là điều chắc chắn, nhóm rất mong nhận được những sự chỉ bảo, ý kiến đóng góp quý báu của quý Thầy Cô và các bạn học cùng lớp để em có điều kiện được bổ sung, nâng cao kiến thức của mình trong lĩnh vực này, giúp hoàn thiện hơn
và tích lũy thêm cho bản thân nhiều kinh nghiệm, phục vụ tốt hơn cho công việc thực
tế sau này
Cuối cùng, chúng em xin được gửi đến ba mẹ, gia đình và bạn bè lời cảm ơn, tri ân chân thành và lòng biết ơn sâu sắc vì những sự động viên, ủng hộ, giúp đỡ và
cổ vũ tinh thần cho chúng em trong suốt quá trình vừa qua
Chúng em xin chân thành cảm ơn!
Trang 111
ĐẠI HỌC QUỐC GIA TP HỒ CHÍ
MINH
TRƯỜNG ĐẠI HỌC
CÔNG NGHỆ THÔNG TIN
CỘNG HÒA XÃ HỘI CHỦ NGHĨA
VIỆT NAM Độc Lập - Tự Do - Hạnh Phúc
TP HCM, ngày… tháng … năm ………
ĐỀ CƯƠNG CHI TIẾT
Tên đề tài: Ứng dụng tổng hợp tin tức (News Aggregator application)
Cán bộ hướng dẫn: TS HUỲNH NGỌC TÍN
Thời gian thực hiện: Từ ngày 21/9/2021 đến ngày 20/12/2022
Sinh viên thực hiện:
VÕ MINH ĐÔN – 18520608
TRẦN CÔNG NAM – 18521131
Nội dung đề tài:(Mô tả chi tiết mục tiêu, phạm vi, đối tượng, phương pháp
thực hiện, kết quả mong đợi của đề tài)
Mục tiêu:
Ứng dụng tổng hợp tin tức chạy trên thiết bị di động được thực hiện dựa trên
hai mục tiêu chính sau:
- Thứ nhất là nắm được các giai đoạn trong quá trình tổng hợp tin
- Thứ hai là xây dựng ứng dụng tổng hợp tin tức chính thống, uy tín đến từ nhiều lĩnh vực khác nhau
Nhóm hi vọng trên nền tảng lý thuyết đã được thầy cô truyền thụ lại, kết hợp
với sự tìm hiểu công nghệ của nhóm, luận văn tốt nghiệp của nhóm sẽ đạt được mục tiêu đề ra
Phạm vi: các tin tức được tổng hợp sẽ tới từ những trang báo có uy tín đã được
thẩm định
Trang 12Phương pháp thực hiện: làm việc với nhóm 02 thành viên, phân chia công
việc phù hợp với năng lực và kinh nghiệm của từng người, thực hiện đồ án 2 theo lượng công việc và thời gian đã được lập kế hoạch chi tiết Các vấn đề liên quan đến đồ án đều được trao đổi trực tiếp giữa các thành viên
Kết quả mong đợi:
Sau khi xác định đề tài và nghiên cứu, tìm hiểu thực tế, nhóm đã xây dựng ý tưởng thiết kế ứng dụng đọc báo đạt được những tiêu chí sau:
Đối với người dùng:
Đối với người dùng: Đọc tin tức xu hướng, nổi bật, các tin tức phù hợp với sở thích, tìm kiếm tin tức, quản lý nội dung, lĩnh vực tin tức mà bản thân quan tâm
Kế hoạch thực hiện: (Mô tả kế hoạch làm việc và phân chia công việc các
thành viên tham gia)
Với thời gian thực hiện từ 21/9/2021 tới 20/11/2021, nhóm chia thành 8 sprint với 2 giai đoạn cụ thể:
Trang 13• Sprint 2: Thiết kế các chức năng, giao diện ứng dụng và cơ sở dữ liệu
• Sprint 3: Xây dựng các chức năng và giao diện ứng dụng đã được xác định ở sprint 2, xây dựng cơ sở dữ liệu
• Sprint 4: Xây dựng các chức năng còn lại ở sprint 3 Thu thập dữ liệu
• Sprint 5: Xây dựng các chức năng còn lại ở sprint 4, xây dựng thêm chức năng mới nếu có thời gian
Sprint VÕ MINH ĐÔN TRẦN CÔNG NAM
Tìm hiểu các công nghệ tự động thu thập dữ liệu như Python, Nodejs, MongoDB
Khảo sát các ứng dụng hiện
có như: Thanh niên, Lao động, Vnexpress, … Tìm hiểu các công nghệ xây dựng ứng dụng đa nền tảng như Flutter
Tìm hiểu các công nghệ tự động thu thập dữ liệu như, Python, MongoDB…
Thiết kế chức năng, giao diện ứng dụng, cơ sở dữ liệu
Trang 14Xây dựng cơ sở dữ liệu
Xây dựng giao diện, chức năng: Trang chủ, trang cá nhân Xây dựng cơ sở dữ liệu
Hoàn thiện các chức năng ở sprint 3 Xây dựng chức năng tin theo thể loại, thông báo Thu thập dữ liệu
Hoàn thiện các chức năng ở sprint 4 Xây dựng chức năng tin yêu thích
- Giai đoạn 2: Xử lý dữ liệu đã thu thập, kiểm thử, tổng hợp báo cáo đồ
án
• Sprint 6: Xử lý dữ liệu đã thu thập được
• Sprint 7: Kiểm thứ ứng dụng, tổng hợp báo cáo đồ án
Sprint VÕ MINH ĐÔN TRẦN CÔNG NAM
6
(1/12/2021 –
15/12/2021)
Xử lý dữ liệu đã thu thập được
Xử lý dữ liệu đã thu thập được
Trang 155
HUỲNH NGỌC TÍN
(Ký tên và ghi rõ họ tên)
VÕ MINH ĐÔN TRẦN CÔNG NAM
Trang 166
CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI
1.1 Giới thiệu về đề tài
1.1.1 Tìm hiểu về tin tức
Ngay từ thuở sơ khai của xã hội, con người đã có khao khát mãnh liệt với tin tức Nhưng tại những thời điểm ban đầu này, tin tức thường được truyền miệng và đối với những tin tức có giá trị cao thì chỉ tầng lớp thượng lưu mới có cơ hội tiếp cận với nó Hình thức lan truyền tin tức bằng miệng chỉ thật sự thay đổi với sự ra đời của báo giấy Báo giấy tiếp tục thống trị vài thế kỉ sau đó cho tới sự xuất hiện của radio, ti vi vào thế kỷ 20 và internet vào thế kỷ 21 Xuyên suốt chiều dài lịch sử, các hình thức để lan truyền tin tức có thể thay đổi nhưng xét về mặt bản chất tin tức vẫn giữ được vẻ sơ khai vốn có của nó, cụ thể tin tức được định nghĩa là thông tin
về các sự kiện hiện tại Các chủ đề phổ biến cho các báo cáo tin tức bao gồm chiến tranh, chính phủ, chính trị, giáo dục, y tế, môi trường, kinh tế, kinh doanh, thời trang và giải trí, cũng như các sự kiện thể thao, sự kiện kỳ quặc hoặc bất thường Tin tức phải đảm bảo được năm tính chất sau:
• Tính chính xác: không những ý chính của bản tin phải chuẩn xác mà
cả những mẩu thông tin khác được đề cập đến trong bài viết cũng phải đạt được mức độ xác thực tương tự
tin với mục tiêu tái hiện lại một bức tranh toàn cảnh hoàn chỉnh nhất cho người dùng
của tác giả về sự việc đang được đề cập, thay vào đó tin tức phải là hiện thân của sự khách quan
• Tính ngắn gọn, rõ ràng: tin tức không được dài dòng lê thê mà nên cô đọng, súc tích
• Tính thời điểm: một tin tức chỉ hợp lệ khi được gán với một mốc thời điểm, thời gian xác định
Trang 177
1.1.2 Tìm hiểu về tổng hợp tin tức
Theo quy định của pháp luật Việt Nam hiện hành thì có 5 loại trang thông tin điện tử Và một trong số đó là trang thông tin điện tử tổng hợp Trang tin điện tử tổng hợp là trang thông tin điện tử của cơ quan, doanh nghiệp, tổ chức cung cấp thông tin tổng hợp trên cơ sở trích dẫn nguyên văn, chính xác nguồn tin chính thức
và ghi rõ họ tên tác giả hoặc tên cơ quan của nguồn tin chính thức, thời gian đã đăng, phát thông tin đó
Tổng hợp tin tức bao gồm một chuỗi các hành động diễn ra theo trình tự xác định: thu thập, phân tích, cung cấp thông tin tổng hợp trên cơ sở đăng đường dẫn truy cập tới nguồn tin báo trí hoặc trích dẫn nguyên văn, chính xác nguồn tin báo chí theo quy định của pháp luật về sở hữu trí tuệ
1.1.3 Lý do chọn đề tài
Chúng ta đang sống trong thời đại của công nghệ, thời đại mà báo giấy đang mất dần đi sự quan tâm của độc giả, thay vào đó là sự bùng nổ thông tin của các trang báo điện tử Có thể nói, trong thời đại hiện nay việc tự do thông tin, tự do nói lên quan điểm của mọi người dễ dàng như uống một tách cà phê, chính vì thế mà các nguồn thông tin trở nên đa dạng, đa chiều hơn Tuy nhiên bên cạnh những lợi ích trên là giúp mọi người tiếp cận thông tin dễ dàng và nhanh chóng hơn thì một bộ phận có ý đồ xấu lại lợi dụng điều này để tin ra những thông tin không chính thống, xuyên tạc, mang tính chất tiêu cực nhằm kích động người dân trên không gian mạng nói chung và các bộ phận đảng viên nói riêng quay lưng với đảng và nhà nước, tiếp tay tuyên truyền thông tin sai sự thật, gây mất đoàn kết nội bộ và ngiêm trọng hơn
là suy thoái về tư tưởng
Với mục đích giúp mọi người dễ dàng tiếp cận được nhiều nguồn tin tức từ các trang báo uy tín đã được kiểm duyệt, các trang báo của chính phủ để tiếp cận được thông tin chính xác và bắt kịp thông tin từ thị trường, nâng cao tri thức Nhóm quyết định ứng dụng các công nghệ thu thập, xử lý dữ liệu và xây dựng ứng dụng di động nhằm hỗ trợ người dùng và đã chọn đề tài “Ứng dụng tổng hợp tin tức”
Trang 188
1.2 Khảo sát hiện trạng
Hiện nay, trên thị trường có nhiều ứng dụng về tổng hợp tin tức nhưng đa số các ứng dụng này đều có chứa tin tức từ những nguồn tin không được kiểm duyệt, các tin giật title câu view không rõ ràng
Một số ứng dụng trên nổi tiếng hiện nay là: Thanh niên, Lao động,
Vnexpress, …
1.3 Đối tượng nghiên cứu
Đồ án này hướng đến nghiên cứu các đối tượng sau:
o Visual studio code
• Đối tượng trong phạm vi đề tài hướng đến:
o Những người mong muốn tiếp cận nguồn thông tin chính thống, uy tín
từ nhiều lĩnh vực một cách dễ dàng
1.4 Phạm vi nghiên cứu
Ứng dụng Mews được nhóm xây dựng bằng ngôn ngữ Dart trên nền tảng công
nghệ Flutter với môi trường Visual studio code và cơ sở dữ liệu MongoDB và MongoDB Tin tức được lấy về và xử lý bằng công cụ Excel và Python
1.5 Phương pháp nghiên cứu
Nhóm đã sử dụng các phương pháp nghiên cứu:
• Phương pháp đọc tài liệu
• Phương pháp phân tích các ứng dụng hiện có
1.6 Nhiệm vụ của đề tài
Để tài “Ứng dụng tổng hợp tin” là một ứng dụng chạy trên điện thoại trên cả nền tảng Android và IOS
• Chức năng của phần mềm
Trang 199
o Đăng ký tài khoản
o Đăng nhập tài khoản
o Xem các thông tin dựa trên nhiều lĩnh vực khác nhau
o Xem các tin nổi bật, xu hướng
o Xem các tin tức thuộc chuyên mục mình quan tâm
o Quản lý các chuyên mục
o Quản lý các tin đã đọc
o Quản lý các tin ưa thích
o Xem các thông tin về thời tiết, lịch việt, kết quả xổ số… Mục tiêu của đề tài này là:
Tìm hiểu cách xây dựng ứng dụng trên điện thoại di động Tìm hiểu về tin tức, tổng hợp tin tức
Xây dựng thành công ứng dụng tổng hợp tin tức
Trang 20Flutter gồm 2 thành phần quan trọng:
- Một SDK (Software Development Kit): Một bộ sưu tập các công cụ sẽ giúp bạn phát triển các ứng dụng của mình Điều này bao gồm các công
cụ để biên dịch mã của bạn thành mã máy gốc (mã cho iOS và Android)
- Một Framework (UI Library based on widgets): Một tập hợp các thành phần UI có thể tái sử dụng (button, text inputs, slider, ) giúp bạn có thể
cá nhân hóa tùy theo nhu cầu của riêng mình
2.1.2 Kiến trúc của Flutter
Flutter được thiết kế như một hệ thống nhiều lớp (Layer), có thể mở rộng Nó tồn tại như một loạt các thư viện độc lập mà mỗi thư viện phụ thuộc vào các lớp bên dưới Không có lớp nào có đặc quyền được truy cập đến các lớp bên dưới và mỗi phần của framework level được thiết kế để có thể tuỳ chọn và thay thế
Trang 2111
Hình 2 1: Kiến trúc của Flutter
Đối với hệ điều hành nằm bên dưới, Flutter được đóng gói giống như bất kỳ các ứng dụng gốc nào khác Một trình nhúng cho các platform cụ thể cung cập một entrypoint, phối hợp với hệ điều hành nằm bên dưới để truy cập đến các dịch vụ
như là hiển thị bề mặt, khả năng truy cập và đầu vào và quản lý vòng lặp thông điệp
sự kiện Trình nhúng được viết bằng ngôn ngữ phù hợp với nền tảng: hiện tại là
Java và C ++ cho Android, Objective-C / Objective-C ++ cho iOS và macOS, và C ++ cho Windows và Linux Sử dụng trình nhúng, mã Flutter có thể được tích hợp vào ứng dụng hiện có dưới dạng mô-đun hoặc mã có thể là toàn bộ nội dung của
ứng dụng Flutter bao gồm một số trình nhúng cho các nền tảng mục tiêu chung,
nhưng các trình nhúng khác cũng tồn tại
Cốt lõi của Flutter là Flutter engine, chủ yếu được viết bằng C ++ và hỗ trợ các nguyên tắc cần thiết để hỗ trợ tất cả các ứng dụng Flutter Engine chịu trách
Trang 2212
nhiệm tạo ra các cảnh tổng hợp bất cứ khi nào cần sơn một khung mới Nó cung cấp triển khai cấp thấp của API cốt lõi của Flutter, bao gồm đồ họa (thông qua Skia), bố cục văn bản, tệp và mạng I / O, hỗ trợ khả năng tiếp cận, kiến trúc plugin và chuỗi công cụ biên dịch và Dart runtime
Công cụ được tiếp xúc với Flutter framework thông qua dart: ui, bao bọc mã
C ++ bên dưới trong các lớp Dart Thư viện này hiển thị các primitives cấp thấp nhất, chẳng hạn như các lớp để thúc đẩy hệ thống con nhập liệu, đồ họa và kết xuất văn bản
Thông thường, các nhà phát triển tương tác với Flutter thông qua Flutter
framework, cung cấp một framework phản ứng hiện đại được viết bằng ngôn ngữ Dart Nó bao gồm một bộ thư viện nền tảng, bố cục và nền tảng phong phú, bao gồm một loạt các lớp Làm việc từ dưới lên trên, chúng ta có:
- Các lớp fundational cơ bản và các dịch vụ khối xây dựng như
animation, painting và gestures cung cấp các nội dung trừu tượng thường được sử dụng trên nền tảng bên dưới
- Lớp rendering cung cấp một sự trừu tượng để xử lý bố cục Với lớp này, bạn có thể xây dựng một cây các đối tượng có thể kết xuất Bạn
có thể thao tác động các đối tượng này, với cây tự động cập nhật bố cục để phản ánh các thay đổi của bạn
- Lớp widget là một phần trừu tượng hóa thành phần Mỗi đối tượng kết xuất trong lớp kết xuất có một lớp tương ứng trong lớp widget Ngoài
ra, lớp widget cho phép bạn xác định tổ hợp các lớp mà bạn có thể sử dụng lại Đây là lớp mà tại đó mô hình lập trình phản ứng được giới thiệu
- Các thư viện Material và Cupertino cung cấp các bộ điều khiển toàn
diện sử dụng các thành phần primitives của lớp widget để triển khai ngôn ngữ thiết kế Material hoặc iOS
Flutter framework tương đối nhỏ; nhiều tính năng cấp cao hơn mà nhà phát triển có thể sử dụng được triển khai dưới dạng gói, bao gồm các plugin nền tảng
Trang 23Trong ứng dụng Flutter, mọi thứ đều là một widget Flutter nhấn mạnh
widget như một đơn vị cấu thành Các tiện ích con là các khối xây dựng của giao diện người dùng của ứng dụng Flutter và mỗi widget là một khai báo bất biến của một phần giao diện người dùng
Các widget tạo thành một hệ thống phân cấp dựa trên thành phần Mỗi
widget con nằm bên trong widget cha của nó và có thể nhận ngữ cảnh từ widget cha, cứ như thế cho đến widget gốc (root widget)
Các ứng dụng cập nhật giao diện người dùng của nó để đáp ứng các sự kiện (chẳng hạn như tương tác với người dùng) bằng cách yêu framework thay thế một widget trong hệ thống phân cấp bằng một widget khác Sau đó, khung công tác sẽ
so sánh các widget mới và cũ, đồng thời cập nhật giao diện người dùng một cách hiệu quả
Flutter có các triển khai riêng của từng giao diện người dùng,ví dụ: có một triển khai Dart thuần túy của cả iOS Switch control và một cái tương đương với Android
Những cách tiếp cận trên mang đến một vài các thuận lợi:
- Cung cấp khả năng mở rộng không giới hạn Một nhà phát triển muốn
có một biến thể của điều khiển Switch có thể tạo một biến thể theo bất
kỳ cách nào tùy ý và không bị giới hạn ở các điểm mở rộng do hệ điều hành cung cấp
- Tránh tắc nghẽn hiệu suất đáng kể bằng cách cho phép Flutter tổng hợp toàn bộ cảnh cùng một lúc mà không cần chuyển đổi qua lại giữa
mã Flutter và mã nền tảng
Trang 2414
- Tách hành vi ứng dụng khỏi bất kỳ phụ thuộc hệ điều hành nào Ứng dụng có giao diện giống nhau trên tất cả các phiên bản của hệ điều hành, ngay cả khi hệ điều hành đã thay đổi cách triển khai các điều khiển của nó
2.1.4 Ưu điểm
Flutter có các ưu điểm nổi bật sau:
- Phát triển ứng dụng nhanh chóng: Tính năng hot reload giúp bạn
nhanh chó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ỗi nhanh 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 đẹp mắt theo Material Design và Cupertino (iOS-flavor), các API chuyển động phong phú, scroll tự nhiên mượt mà và tự nhận thức được nền tảng
- Truy cập các tính năng và SDK native: Làm cho ứng dụng trở nên
sống động với API của platform, SDK của bên thứ ba và native code
Nó cho phép sử dụng lại mã Java, Swift và ObjC hiện tại của mình, truy cập các tính năng và SDK native trên iOS và Android
- 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ó kinh nghiệ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
2.1.5 Nhược điểm
Bên cạnh những ưu điểm, flutter còn tồn tại một vài nhược điểm sau:
- Không hiệu quả và giống 100% với native
- Cộng đồng đóng góp và tài liệu không lớn bằng các Framework khác (React Native)
Trang 252.1.6 Tại sao lại chọn Flutter ?
Flutter và React Native hiện đang là hai công nghệ phát triển ứng dụng di động cross-platform (đa nền tảng) phổ biến nhất hiện nay Dưới đây là các ưu điểm nổi bật để nhóm sinh viên lựa chọn Flutter thay vì React Native
Những ưu điểm của Flutter so với React Native:
- Tài liệu sạch sẽ, rõ ràng và dễ hiểu
- Cài đặt môi trường một cách nhanh chóng
- Sự hỗ trợ từ Google và một cộng đồng mạnh mẽ với nhiều IDE: Android Studio, IntelJ Idea, VSCode,…
- Tốc độ phát triển nhanh hơn với sẵn các giải pháp quản lý dữ liệu
- Ứng dụng Native performance tuyệt vời
- Một loạt các UI component dễ biểu đạt và linh hoạt
- Stateful Hot Reloading cho sự thực hiện thay đổi nhanh hơn
- Khả năng truy cập native SDK và các feature của chúng
- Cách tiếp cận coding hiện đại, nâng cao và linh hoạt
- API hỗ trợ các hiệu ứng, animation và gesture 2D
Đã có kiến thức về các ngôn ngữ lập trình hướng đối tượng (C++, Java, C#)
do vậy việc chuyển qua học ngôn ngữ Dart cực kì dễ dàng so với Javascript (Cú pháp của Dart khá giống với C++)
2.2 Tổng quan về Dart
Flutter sử dụng ngôn ngữ Dart để xây dựng ứng dụng di động đa nền tảng Vì vậy, sinh viên cần tìm hiểu về ngôn ngữ lập trình Dart
Trang 2616
2.2.1 Khái niệm
Dart là ngôn ngữ lập trình được thiết kế cho việc phát triển phía client, như web và ứng dụng di động Được phát triển bởi Google và còn có thể được dùng để xây dựng máy chủ và các ứng dụng trên nền tảng Desktop
Dart là ngôn ngữ thuần hướng đối tượng, dựa trên class, ngôn ngữ collected với cú pháp giống với ngôn ngữ C Dart có thể biên dịch ra native code hoặc javascript Nó còn được hỗ trợ interface, mixin, abstract classes, reified
garbage-generics và type inference (Wikipedia)
Dart là ngôn ngữ mã nguồn mở và miễn phí, được phát triển trên GitHub
2.2.2 Đặc điểm
Dart hỗ trợ rất nhiều các đặc tính tuyệt vời Dưới đây là các đặc tính chính và quan trọng như:
- Hỗ trợ lập trình hướng đối tượng OOP
- Hỗ trợ HTML DOM framework để bạn khai thác DOM đa trình duyệt
- Hỗ trợ cú pháp Fluent API nghĩa là bạn có thể gán giá trị của các thuộc tính trong một dòng code
- Hỗ trợ lập trình không đồng bộ async
- Hỗ trợ deferred loading từ Dart 1.6 Tính năng sẽ giúp bạn cải thiện được hiệu suất khi khởi động ứng dụng bởi vì nó sẽ khởi tạo các package nào đang được sử dụng trong ứng dụng của bạn
- Tích hợp với Polymer project để bạn xây dựng các web components và tái
sử dụng lại trong các ứng dụng khác trong tương lai
- Tích hợp với Angular để bạn có thể tạo ứng dụng web theo mô hình MVC
có thể dễ dàng bảo trì, dễ kiểm thử và clean code hơn
- Hỗ trợ các thư viện toán học để bạn xây dựng các ứng dụng game và ứng dụng liên quan đến việc tính toán
- Hỗ trợ các kiểu dữ liệu phố biến như số nguyên, chuỗi, số thực
2.2.3 Ưu điểm
Dart có những ưu điểm nổi bật sau:
Trang 2717
- Năng suất: Cú pháp Dart rõ ràng và súc tích, công cụ của nó đơn giản nhưng mạnh mẽ Type-safe giúp bạn xác định sớm các lỗi tinh tế Dart có các thư viện cốt lõi và một hệ sinh thái gồm hàng ngàn package
- Nhanh: Dart cung cấp tối ưu hóa việc biên dịch trước thời hạn để có được
dự đoán hiệu suất cao và khởi động nhanh trên các thiết bị di động và web
- Di động: Dart biên dịch thành mã ARM và x86, để các ứng dụng di động của Dart có thể chạy tự nhiên trên iOS, Android và hơn thế nữa Đối với các ứng dụng web, chuyển mã từ Dart sang JavaScript
- Dễ gần: Dart quen thuộc với nhiều nhà phát triển hiện có, nhờ vào cú pháp
và định hướng đối tượng không gây ngạc nhiên của nó Nếu bạn đã biết C++, C# hoặc Java, bạn có thể làm việc hiệu quả với Dart chỉ sau vài ngày
- Reactive Dart: rất phù hợp với lập trình Reactive, với sự hỗ trợ để quản lý các đối tượng tồn tại trong thời gian ngắn, chẳng hạn như các widget UI, thông qua phân bổ đối tượng nhanh và GC Dart hỗ trợ lập trình không đồng bộ thông qua các tính năng ngôn ngữ và API sử dụng các đối tượng
- Khá mới đối với lập trình viên và còn đang ít được sử dụng trên thị trường
- Còn đang trong giai đoạn phát triển, chưa ổn định
Tuy nhiên những nhược điểm trên đa số đều gặp phải bởi các ngôn ngữ lập trình mới xuất hiện nên việc sử dụng không hẳn là khó khăn
Trang 2818
2.3 Tổng quan về Firebase
2.3.1 Khái niệm
Firebase là nền tảng được phát triển bởi google dành cho việc hỗ trợ các ứng
dụng web và mobile Ban đầu nó được tạo ra bởi một công ty độc lập năm 2011
và được Google mua lại vào năm 2014 Với việc sử dụng Firebase, các nhà phát
triển sẽ thao tác ở phía backend thuận lợi hơn do đó dành nhiều thời gian hơn
trong công việc phát triển ứng dụng ở khía cạnh khác
Firebase thuộc BaaS (Backend as a service) Hướng đến thiết bị chủ yếu là
mobile nên còn có thể gọi là MBaaS
2.3.2 Kiến trúc
Hình 2 2: Kiến trúc của Firebase
1 Công cụ để soạn hoặc xây dựng các message request The Notification
composer cung cấp tùy chọn dựa trên GUI để tạo các message request Để tự
động hóa hoàn toàn và hỗ trợ tất cả message types, bạn phải tạo các message
request trong môi trường máy chủ đáng tin cậy hỗ trợ SDK quản trị Firebase
hoặc các giao thức máy chủ FCM
Trang 29o Android transport layer (ATL) cho các thiết bị Android có dịch vụ
Google play
o Dịch vụ gửi thông báo (APNs) cho các thiết bị IOS
o Push protocol cho các ứng dụng Web
4 SDK FCM trên thiết bị của người dùng, nơi thông báo được hiển thị hoặc thông báo được xử lý theo trạng thái backgound / foreground của ứng dụng
và mọi logic ứng dụng có liên quan
2.3.3 Các chức năng chính
Firebase authentication: Firebase Authentication là chức năng dùng để xác
thực người dùng bằng Password, số điện thoại hoặc tài khoản Google, Facebook hay Twitter, v.v Firebase Authentication giúp thực hiện việc chia sẻ ID giữa các ứng dụng, giúp người dùng dễ dàng tiếp cận sản phẩm hơn Vì thế, nó là một chức năng rất cần thiết
Firebase cloud storage: Firebase storage lưu trữ được nhiều dạng dữ liệu
như tập tin, hình ảnh, video một cách dễ dàng Ngoài ra nó còn tích hợp Google security giúp tải lên và tải về các ứng dụng firebase một cách tiện lợi
Firebase firestore: Cloud Firestore là một cơ sở dữ liệu linh hoạt, có thể mở
rộng để phát triển thiết bị di động, web và máy chủ từ Firebase và Google Cloud Giống như Cơ sở dữ liệu thời gian thực của Firebase, nó giữ cho dữ liệu của bạn được đồng bộ hóa trên các ứng dụng khách thông qua trình xử lý thời gian thực và cung cấp hỗ trợ ngoại tuyến cho thiết bị di động và web để bạn có thể tạo các ứng dụng đáp ứng hoạt động bất kể độ trễ mạng hoặc kết nối Internet
Firevase cloud messaging: Với Firebase Cloud Messaging, ta có thể gửi
nhận tin nhắn miễn phí Khái niệm "Gửi message" ở đây còn dùng để chỉ việc push
Trang 3020
thông báo Khi tên nhắn mới được gửi tới, người dùng có thể nhận được thông báo
Ví dụ, với trường hợp người dùng sử dụng iPhone, khi có mail hay thông báo từ application, ở góc trên bên phải icon của app đó sẽ xuất hiện dấu tròn nhỏ màu đỏ, hay tiện lợi hơn, trong dấu tròn đỏ ấy sẽ hiển thị số lượng thông báo, tin nhắn mới
2.3.4 Ưu điểm
Tạo tài khoản và sử dụng dễ dàng
Tốc độ phát triển nhanh
Nhiều dịch vụ trong một nền tảng
Được hỗ trợ bởi Google
Tập trung vào phát triển giao diện người dùng
Firebase không có máy chủ
Tạo lưu lượng truy cập
Sau lưu
2.3.5 Nhược điểm
Chỉ hoạt động với cơ sở dữ liệu NoSql
Truy vấn chậm
Không phải tất cả dịch vụ được miễn phí
Giá hơi cao và không ổn định
Chỉ chạy trên Google cloud
2.3.6 Tại sao chọn Firebase?
Phát triển ứng dụng di động
Cơ sở dữ liệu ít hoặc không có quan hệ
Kiểm soát truy cập dễ dàng
Hỗ trợ đăng nhập nhiều tài khoản
Dễ Scale khi có nhu cầu
Bảo mật
Trang 3121
2.4 Giới thiệu về chuỗi JSON
2.4.1 Khái niệm chuỗi JSON
JSON là chữ viết tắt của Javascript Object Notation, đây là một dạng dữ liệu tuân theo một quy luật nhất định mà hầu hết các ngôn ngữ lập trình hiện nay đều có thể đọc được, có thể sử dụng lưu nó vào một file, một record trong CSDL rất dễ dàng JSON có định dạng đơn giản, dễ dàng sử dụng và truy vấn hơn XML rất nhiều nên tính ứng dụng của nó hiện nay rất là phổ biến
JSON là định dạng trao đổi dữ liệu văn bản dung lượng nhẹ Cú pháp của JSON rất đơn giản là mỗi thông tin dữ liệu sẽ có 2 phần đó là key và value, điều này tương ứng trong CSDL là tên field và giá trị của nó ở một record nào đó
2.4.2 Cấu trúc chuỗi JSON
Chuỗi JSON được bao lại bởi dấu ngoặc nhọn {}
Các key, value của JSON bắt buộc phải đặt trong dấu nháy kép {"}
Nếu có nhiều dữ liệu (nhiều cặp key => value) thì ta dùng dấu phẩy (,) để ngăn cách
Các key của JSON nên đặt chữ cái không dấu hoặc số, dấu _ và không có khoảng trắng, ký tự đầu tiên không nên đặt là số Điều này rất giống với nguyên tắc đặt tên biến trong PHP
2.4.3 Các trường nên dùng JSON
Lưu trữ dữ liệu đơn thuần Đó là khi lưu trữ dữ liệu dưới dạng metadata ở phía server Chuỗi JSON sẽ được lưu vào database và sau đó khi cần dữ liệu thì sẽ được giải mã Ví dụ với PHP, cung cấp các hàm liên quan đến JSON để mã và giải mã là json_encode và json_decode Phương pháp này cũng tương tự như sử dụng tính năng serialize và unserialize của PHP Nhưng trong khi serialize và unserialize sử dụng với
cả dữ liệu và biến, tức là phụ thuộc vào ngôn ngữ lập trình là PHP và dĩ nhiên không thể transfer sang ngôn ngữ lập trình khác để unserialize được Vì vậy, nếu dữ liệu chỉ đơn thuần là dữ liệu cơ bản (chuỗi kí tự, số…) thì bạn hoàn toàn không nên sử dụng serialize mà nên sử dụng JSON Sử dụng JavaScript, ActionScript để xử lý thông tin trả về từ phía server Rất nhanh và rất dễ dàng
Trang 3222
2.5 Giới thiệu về HTML
2.5.1 Tổng quan
HTML (Hyoertext Markup Language) là một ngôn ngữ đánh dấu được thiết
kế ra để tạo nên các trang web trên World Wide Web Nó có thể được trợ giúp bởi các công nghệ như CSS và các ngôn ngữ như JavaScript
Cấu trúc cơ bản của 1 trang HTML:
- Header: có thể chứa logo, câu slogan, các liên kết, các banner liên kết, các button, đoạn flash, hoặc các form ngắn như form tìm kiếm,…
- Global Navigation: dùng để chứa các liên kết đến những trang quan trọng trong toàn bộ trang, trong phần này có thể chứa thêm các liên kết con (sub navigation)
- Page Body: chứa phần nội dung chính (content) và phần nội dung phụ (sidebar)
- Content: chứa nội dung chính cần thể hiện cho người dùng xem
- Sidebar: chứa liên kết phụ của từng trang (local navigation), hoặc các banner chứa liên kết liên quan, hoặc có thể dùng để chứa các liên kết quảng cáo, …
- Footer: chứa phần liên hệ như: tên công ty, địa chỉ, số điện thoại, mail liên hệ,copyright, hoặc có thể chứa các liên kết toàn trang, các banner liên kết,
2.5.2 Các thẻ trong HTML
2.5.2.1 Basic
<!DOCTYPE> Xác định cho trình duyệt biết phiên bản HTML mà bạn đang
sử dụng
<html> Xác định một tài liệu HTML
<head> Xác định phần đầu của tài liệu HTML
(chứa các thẻ cung cấp thông tin cho trang web)
Trang 3323
2.5.2.2 Formatting
<abbr> Định nghĩa một từ viết tắt
<address> Xác định thông tin liên hệ của tác giả (hoặc chủ sở hữu) trang
web
<b> Xác định đoạn văn bản được in đậm
<bdo> Điều hướng một đoạn văn bản được chỉ định
<big> Xác định một đoạn văn bản có kích thước chữ to hơn văn bản
bình thường
<blockquote> Xác định một "đoạn trích dẫn" từ một website khác
<code> Xác định một đoạn văn bản mang ý nghĩa là các mã lệnh
<del> Tạo một đường kẻ ngang lên văn bản
<em> Xác định một đoạn văn bản được định dạng kiểu chữ in nghiêng
<i> Xác định một đoạn văn bản được định dạng kiểu chữ in nghiêng
<ins> Tạo một đường gạch chân lên văn bản
<kbd> Xác định một từ (hoặc cụm từ) mang ý nghĩa là một phím hoặc
tổ hợp phím
<mark> Đánh dấu màu nền nổi bật cho văn bản
<meter> Tạo phần tử có ý nghĩa giống như: thước đo, ổ đĩa,
<title> Xác định tiêu đề của trang web
<body> Xác định phần thân của tài liệu HTML (chứa những phần tử sẽ
được hiển thị lên màn hình trình duyệt)
<h1> - <h6> Tạo những đề mục quan trọng trong trang web
<p> Xác định một đoạn văn bản
<br> Chèn một ngắt xuống dòng
<hr> Tạo một đường kẻ phân cách nằm ngang
<! > Xác định một đoạn chú thích
Trang 3424
<pre> Giúp cho nội dung mà bạn muốn hiển thị lên màn hình được giữ
nguyên định dạng giống như trong lúc soạn thảo
<progress> Tạo một thanh tiến trình
<q> Xác định một câu trích dẫn ngắn
<s> Tạo một đường kẻ ngang lên văn bản
<small> Xác định một đoạn văn bản có kích thước chữ nhỏ hơn văn bản
bình thường
<strong> Xác định đoạn văn bản được in đậm
<sub> Tạo văn bản có kích thước nhỏ, nằm ở khoảng nửa dưới văn bản
<u> Tạo một đường gạch chân lên văn bản
<wbr> Ngắt bớt ký tự của một từ xuống dòng(trong trường hợp chiều
rộng của phần tử không đủ để chứa hết từ đó)
2.5.2.3 Frames
<frame> Xác định một khung trong một bộ khung
<frameset> Xác định một bộ khung
<noframes> Xác định một nội dung sẽ được hiển thị khi trình duyệt không hỗ
trợ thẻ <frame>
<iframe> Nhúng một trang web khác vào trang web hiện tại
2.5.2.4 Images
Trang 35<audio> Tạo một "trình phát nhạc" cho trang web
<source> Chỉ định tài nguyên cho trình nghe nhạc hoặc trình xem phim
<track> Chèn một bản phụ đề vào video
<video> Tạo một "trình xem phim" cho trang web
2.5.2.6 Links
<a> Tạo một liên kết đến một tài liệu nào đó (khi người dùng bấm vào liên
kết thì sẽ được chuyển đến tài liệu đó)
<nav> Xác định một tập hợp các liên kết & thường được sử dụng kết hợp với
CSS để tạo một thanh menu
2.5.2.7 Lists
<ul> Xác định một danh sách không có thứ tự
<ol> Xác định một danh sách có thứ tự
<li> Xác định một "danh mục" trong danh sách
2.5.2.8 Tables
Trang 3626
<table> Xác định phần tử là một cái bảng
<caption> Tạo tiêu đề cho bảng
<th> Xác định phần tử là một ô tiêu đề trong hàng
<tr> Xác định phần tử là một hàng trong bảng
<td> Xác định phần tử là một ô trong hàng
<thead> Xác định những dòng nào thuộc "phần đầu" của bảng
<tbody> Xác định những dòng nào thuộc "phần thân" của bảng
<tfoot> Xác định những dòng nào thuộc "phần chân" của bảng
2.5.2.9 Styles, Semantics
<style> Dùng để làm thùng chứa cho các đoạn mã CSS
<div> Nhóm các phần tử lại với nhau để tiện cho việc định dạng cũng
như thiết kế bố cục của trang web
<span> Nhóm các phần tử nội tuyến lại với nhau để tiện cho việc định
dạng CSS
<header> Xác định phần đầu của trang web
<footer> Xác định phần chân của trang web
<main> Xác định phần thân của trang web
<dialog> Tạo một hộp thoại
<head> Xác định phần đầu của tài liệu HTML (chứa các thẻ cung cấp thông
tin cho trang web)
Trang 37<script> Dùng để làm thùng chứa cho các câu lệnh JavaScript
<noscript> Xác định một nội dung HTML sẽ được hiển thị khi trình duyệt
không hỗ trợ JavaScript hoặc đã tắt JavaScript
<embed> Dùng để nhúng một "tài liệu" nào đó vào trang web
<object> Dùng để nhúng một "tài liệu" nào đó vào trang web
2.6 Giới thiệu về MongoDB
Ad hoc query: hỗ trợ search bằng field, các phép search thông thường,
regular expression searches, và range queries
Indexing: bất kì field nào trong BSON document cũng có thể được index Replication: có ý nghĩa là “nhân bản”, là có một phiên bản giống hệt phiên bản đang tồn tại, đang sử dụng Với cơ sở dữ liệu, nhu cầu lưu trữ lớn, đòi hỏi cơ sở
dữ liệu toàn vẹn, không bị mất mát trước những sự cố ngoài dự đoán là rất cao Vì
Trang 382.6.3 Ưu điểm MongoDB
Dữ liệu lưu trữ phi cấu trúc, không có tính ràng buộc, toàn vẹn nên tính sẵn sàng cao, hiệu suất lớn và dễ dàng mở rộng lưu trữ
Dữ liệu được caching (ghi đệm) lên RAM, hạn chế truy cập vào ổ cứng nên tốc độ đọc và ghi cao
2.6.4 Nhược điểm MongoDB
Không ứng dụng được cho các mô hình giao dịch nào có yêu cầu độ chính xác cao do không có ràng buộc
Không có cơ chế transaction (giao dịch) để phục vụ các ứng dụng ngân hàng
Dữ liệu lấy RAM làm trọng tâm hoạt động vì vậy khi hoạt động yêu cầu một bộ nhớ RAM lớn
Mọi thay đổi về dữ liệu mặc định đều chưa được ghi xuống ổ cứng ngay lập tức vì vậy khả năng bị mất dữ liệu từ nguyên nhân mất điện đột xuất là rất cao
2.6.5 Tại sao nên chọn MongoDB
Quản lý và truyền tải content – Quản lý đa dạng nhiều product của content chỉ trong một kho lưu trữ data cho phép thay đổi và phản hồi nhanh chóng mà không chịu thêm phức tạp thêm từ hệ thống content
MongoDB cung cấp một platform có sẵn, phản xạ nhanh, và dễ mở rộng cho phép rất nhiều khả năng đột phá, phân tích real-time, và hỗ trợ toàn cầu
Trang 3929
Quản lý data khách hàng – Tận dụng khả năng query nhanh chóng cho phân tích real-time trên cơ sở dữ liệu người dùng cực lớn vớ các mô hình data phức tạp bằng các schema linh hoạt và tự động sharding cho mở rộng chiều ngang
2.7 Giới thiệu về NodeJs
2.7.1 Khái niệm
NodeJS là một nền tảng được xây dựng trên V8 JavaScript Engine – trình thông dịch thực thi mã JavaScript, giúp xây dựng các ứng dụng web một cách đơn giản và dễ dàng mở rộng Ra đời năm 2009, phiên bản hiện tại là 16.4, có nhiều framework từ Node JS, trong đó có ExpressJS
2.7.2 Ưu điểm
- Có tốc độ xử lý nhanh nhờ cơ chế xử lý bất đồng bộ, có thể xử lý nhiều kết nối trong thời gian ngắn
- Dễ dàng mở rộng
- Xử lý nhiều request một lúc trong thời gian ngắn
- Xủ lý nhiều process một cách tối ưu
- Phù hợp xây dựng các ứng dụng thời gian thực như chat, mạng xã hội…
2.7.3 Nhược điểm
- Hao tốn tài nguyên, tốn nhiều thời gian biên dịch
- Không nên sử dụng cho các ứng dụng tốn nhiều tài nguyên
- Phù hợp với các dự án quy mô nhỏ
2.8 Tổng quan về Python
2.8.1 Khái niệm
Ngôn ngữ Python là một ngôn ngữ lập trình mã nguồn mở, đa nền tảng, dễ học dễ đọc Python có cấu trúc rõ ràng, thuận tiện cho người mới học lập trình Vì thế nó được sử dụng rộng rãi
Python là ngôn ngữ hỗ trợ nhiều mẫu đa lập trình khác nhau như: mệnh lệnh, lập trình hướng đối tượng, lập trình hàm, …và được dùng trong đa lĩnh vực: web, 3D CAD, …
Trang 4030
2.8.2 Ưu điểm Python
Là ngôn ngữ dễ học đối với người mới bắt đầu
Khả năng mở rộng cao, thích hợp cho cả các dự án lớn và các chương trình nhỏ
Di động, đa nền tảng
Sử dụng được trên nhiều hệ điều hành từ Windows, UNIX, MS – DOS, Mac
OS và Linux và các OS
Ngôn ngữ lập trình Python có tốc độ xử lý cực nhanh
2.8.3 Nhược điểm Python
Lập trình Python không có một số thuộc tính như: public, protected, không
có vòng lặp do while
So với PHP, Python có tốc độ xử lý nhanh hơn, nhưng vẫn còn thua JAVA
và C++
2.8.4 Tại sao chọn Python
Trong ứng dụng tổng hợp tin tức, có hai bài toán cần giải quyết là web
crawling (thu thập đường link các trang web tin tức) và web scraping (trích xuất nội dung dữ liệu từ các trang web) Python với bộ thư viện đồ sộ như scrapy,
Beautifulsoup4, Selenium sẽ giúp ích rất nhiều để hoàn thành bài toán crawling và scraping
2.8.5 Giới thiệu Beautifulsoup4
Beautiful Soup là một gói Python để phân tích cú pháp các tài liệu HTML và XML (bao gồm cả việc có đánh dấu không đúng định dạng, tức là các thẻ không đóng, nên được đặt tên theo tag soup) Nó tạo một cây phân tích cú pháp cho các trang được phân tích cú pháp có thể được sử dụng để trích xuất dữ liệu từ HTML, rất hữu ích cho việc tìm kiếm trên web