CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1. Java Spring boot: Hình 1.1: Logo Spring Boot [1] 1. Giới thiệu về Java Spring Boot: 1. Spring Framework: Spring là một framework phát triển các ứng dụng bằng ngôn ngữ Java được sử dụng rộng rãi và phổ biến, nó giúp tạo các ứng dụng đơn giản và nhanh chóng, nhưng có hiệu năng cao, dễ sử dụng.
Trên thực tế, Spring framework là tập hợp gồm rất nhiều các dự án nhỏ khác nhau như: Spring MVC (sử dụng để xây dựng các ứng dụng trên nền tảng web), Spring Data, Spring Boot,…Để phát triển một ứng dụng web cơ bản sử dụng Spring framework, bạn cần trải qua ít nhất 5 công đoạn sau: ● Tạo một project sử dụng Maven với các dependency cần thiết. ● Tạo một tập tin web đuôi (.xml) để khai báo DispatcherServlet (thuộc Spring MVC). ● Một tập tin có cấu hình của Spring MVC. 19 ● Trả về một class Controller khi có request đến.
● Cuối cùng là phải có một web server phục vụ triển khai ứng dụng lên chạy. Spring Framework được xây dựng dựa trên 2 nguyên tắc design chính là: Dependency Injection và Aspect Oriented Programming. Những tính năng core (cốt lõi) của Spring có thể được sử dụng để phát triển Java Desktop, ứng dụng mobile, Java Web. Mục tiêu chính của Spring là giúp phát triển các ứng dụng J2EE một cách dễ dàng hơn dựa trên mô hình sử dụng POJO (Plain Old Java Object).2: Kiến trúc Spring Framework [1] 1.
Spring Boot: Spring Boot là một module của Spring Framework, cung cấp các tính năng RAD (Rapid Application Development) – phát triển ứng dụng nhanh. Nó giúp cho các lập trình 20 viên chúng ta đơn giản hóa quá trình lập trình một ứng dụng với Spring, chỉ tập trung vào việc phát triển business cho ứng dụng. Spring Boot dùng để tạo các ứng dụng độc lập dựa trên Spring. Nó không yêu cầu phải cấu hình XML.
Nó là một chuẩn cho cấu hình thiết kế phần mềm, tăng cao năng xuất cho developer.3: Spring boot flow architecture [1] Các đặc điểm của Spring Boot: ● SpringApplication: SpringApplication là một class giúp khởi chạy các ứng dụng từ hàm main thuận tiện. Để bắt đầu ứng dụng, bạn chỉ cần gọi các method run. ● Profiles: Spring Boot Profiles sẽ cung cấp một cách phân chia các cấu hình cho từng môi trường. Các annotation là @Component hoặc @Configuration có thể sẽ được đánh dấu profiles để giới hạn thời điểm hoặc môi trường sẽ được tải lên.
● Externalized Configuration: Externalized Configuration cho phép bạn có khả năng cấu hình được từ bên ngoài. Vì vậy, một ứng dụng được xây dựng có thể được vận hành và hoạt động trên nhiều môi trường khác nhau. Để thực hiện Externalized 21 Configuration bạn có thể sử dụng các file properties, YAML, các tham số command line hay các biến môi trường. ● Logging: Spring Boot sử dụng common logging cho tất cả các chức năng log nội bộ.
Các dependency logging được quản lý mặc định, chúng ta không nên cần sửa dependency logging nếu không có yêu cầu tùy biến (customization) thực sự cần. Ưu điểm: Spring có những ưu điểm sau: ● Hội tụ đầy đủ các tính năng của Spring framework. ● Đơn giản hóa cấu hình và xây dựng được các ứng dụng độc lập có khả năng chạy bằng java-jar nhờ các dependency starter. ● Dễ dàng deploy vì các ứng dụng server được nhúng trực tiếp vào ứng dụng để tránh những khó khăn khi triển khai lên môi trường production mà không cần thiết phải tải file WAR.
● Cấu hình ít, tự động được hỗ trợ bất cứ khi nào cho chức năng spring như tăng năng suất, giảm thời gian viết code và không yêu cầu XML config. ● Cung cấp nhiều plugin, số liệu, cấu hình ứng dụng từ bên ngoài. Giới thiệu về Reactjs: ReactJS là một thư viện JavaScript mã nguồn mở được phát triển bởi Facebook, ra mắt vào năm 2013 với mục đích để xây dựng giao diện người dùng. Nó được sử dụng rộng rãi để xây dựng các trang web SPA (Single Page Application) và các ứng dụng trên nền tảng di động.
Nó rất dễ sử dụng và cho phép người dùng có thể tạo các component UI có thể tái sử dụng, dễ dàng hơn bằng HTML-style code đơn giản. Nó là một trong những tính năng tốt và dễ sử dụng.5: Giới thiệu Reactjs [2] ReactJS có các tính năng hết sức nổi bật bao gồm: ● JSX: viết tắt của JavaScript extension, nó là React extension , giúp cho việc thay đổi cây DOM Components: Một trang web được xây dựng bằng ReactJS là một sự kết hợp nhiều component lại với nhau chứ không phải chung một Template như bình thường. Các component cũng như các hàm JavaScript bình thường, giúp tạo ra các code dễ dàng bằng cách tách các logic ra thành các đoạn code độc lập có thể tái sử dụng. Chúng ta có thể sử dụng component dưới dạng function hoặc class, ngoài ra các component còn có state và props.
● Virtual DOM: ReactJS tạo một thứ gọi là Virtual DOM (DOM ảo). Đúng như tên gọi, nó là một copy của DOM thật trên trang web đó. ReactJS dùng những DOM ảo đó để tìm đúng những DOM thật cần được cập nhật khi có bất kỳ sự kiện nào làm các thành phần bên trong nó thay đổi. ● Javascript Expressions: Biểu thức JS có thể sử dụng trong file .js bằng cách sử dụng cặp dấu ngoặc nhọn “{}”.
Ưu điểm: Reactjs có những ưu điểm sau: 24 ● Vì ReactJS sử dụng DOM ảo để cache cấu trúc dữ liệu trong bộ nhớ và chỉ những thay đổi cuối cùng mới được cập nhật vào trong DOM trình duyệt. Điều này làm cho ứng dụng trở nên nhanh hơn. ● Bạn có thể tạo các component theo từng chức năng mà bạn muốn bằng cách sử dụng tính năng react component. Các component này có thể tái sử dụng theo nhu cầu của bạn, đồng thời việc tạo các component theo từng chức năng cũng giúp cho việc bảo trì sau này trở nên dễ dàng hơn.
● ReactJS là một opensource, vì vậy cũng rất dễ cho những bạn mới bắt đầu tìm hiểu nó. ● Trong những năm gần đây, ReactJS đang trở nên phổ biến hơn và được duy trì bởi Facebook và Instagram. Ngoài ra nó cũng được sử dụng bởi các công ty nổi tiếng như Apple, Netflix, … ● Facebook vẫn đang duy trì, phát triển, và cho ra những thay đổi mới. Vì thế bạn cứ yên tâm sử dụng ReactJS cho những dự án của bạn hoặc những dự án dành do doanh nghiệp.
● ReactJS có thể được sử dụng để xây dựng giao diện người dùng cho cả các ứng dụng dành cho máy tính và các ứng dụng di động. ● Dễ dàng cho việc test và debug, vì hầu hết các code đều được thực hiện bằng JavaScript chứ không phải bằng HTML. Giới thiệu về Firebase: Firebase là một nền tảng được phát triển bởi Google được sử dụng để phát triển các ứng dụng di động và các website bao gồm các API vô cùng đơn giản và rất mạnh giúp chúng ta xây dựng các hệ thống không cần tới Backend. Firebase là dịch vụ cơ sở dữ liệu hoạt động trên nền tảng đám mây – cloud cùng với hệ thống máy chủ vô cùng mạnh mẽ của Google.
Firebase storage: Hình 1. Firebasse real-time database: Firebase realtime database là một cơ sở dữ liệu thời gian thực, NoSQL được lưu trữ đám mây cho phép bạn lưu trữ và đồng bộ dữ liệu. Dữ liệu được lưu trữ dưới dạng cây Json, và được đồng bộ theo thời gian thực đối với mọi kết nối. Cả một cơ sở dữ liệu là một cây json lớn, với độ trễ thấp, Firebase realtime database cho phép bạn xây dựng các ứng dụng cần độ realtime như app chat, hay game online… 27 Hình 1.8: Firebase real-time database [3] Các khả năng chính của Realtime Database: ● Realtime: Firebase Realtime Database sử dụng đồng bộ dữ liệu mối khi dữ liệu có thay đổi, mọi thiết bị được kết nối sẽ nhận được thay đổi trong vài mili giây.
● Offline: Khi người dùng ngoại tuyến, dữ liệu sẽ được lưu trên bộ nhớ cache của thiết bị và tự động đồng bộ khi bạn trực tuyến. Tất cả là tự động ● Accessible from Client Devices: Firebase Realtime Database có thể truy cập từ một thiết bị mobile hoặc trình duyệt web. Nó không cần một ứng dụng server nào cả. Bảo mật và xác thực dữ liệu có thể thông qua các Rule bảo mật của Firebase Realtime Database, các rule được thực thi khi dữ liệu được đọc hoặc ghi.9: Firebase gửi dữ liệu tới client [3] 1.
Ưu điểm: Firebase có những ưu điểm sau: ● Triển khai ứng dụng nhanh chóng: Bởi không phải quan tâm đến phần backend cùng các API tốt, hỗ trợ đa nền tảng, Firebase tiết kiệm rất nhiều thời gian quản lý và đồng bộ tất cả dữ liệu cho người dùng. Song song đó, nó còn cung cấp hosting và hỗ trợ xác thực thông tin khách hàng khiến việc triển khai ứng dụng nhanh chóng hơn. ● Bảo mật: Hoạt động trên nền tảng đám mây cloud, sử dụng kết nối thông qua giao thức bảo mật SSL và cho phép phân quyền người dùng cơ sở dữ liệu bằng Javascript, các đặc điểm này của Firebase giúp nâng cao độ bảo mật cho các ứng dụng. ● Sự ổn định: Hầu hết các ứng dụng trên nền tảng Firebase luôn hoạt động ổn định vì chúng được viết dựa trên nền tảng cloud cung cấp bởi Google.
Hơn nữa, nhờ Firebase mà việc nâng cấp hay bảo trì Server cũng diễn ra khá đơn giản mà không cần phải dừng lại. Colaborative filtering là gì? [9] Hình 1.10: Collaborative filtering algorithm [4] Collaborative filtering là thuật toán lọc tương tác, nó dựa trên các hoạt động của các người dùng khác nhau trên cùng một đối tượng, hoặc tương tác giữa các người dùng để từ đó suy ra mức độ quan tâm của các người dùng với đối tượng đó hoặc giữa các người dùng với nhau. Đầu vào của thuật toán là một ma trận tiện ích (ultility matrix) chứa giá trị rating của các cặp (user, item). Mỗi cột là các rating mà một user đã rate và mỗi dòng là các rating của một item được rate.
Có 2 phương pháp chính được sử dụng trong collaborative filtering bao gồm: Neighborhood-based collaborative Filtering và Matrix Fractorization. Neighborhood-based collaborative Filtering: [10] Hình 1.11: Neighborhood-based collaborative Filtering [4] Neighborhood-based Collaborative Filtering: Phương pháp gợi ý các items dựa trên sự tương quan (similarity) giữa các users và/hoặc items. Có thể hiểu rằng đây là cách gợi ý tới một user dựa trên những users có hành vi tương tự. Phương pháp này được chia thành 2 hướng nhỏ, là User-User Collaborative Filtering (uuCF) và Item-Item Collaborative Filtering (iiCF) - uuCF: Tư tưởng của hướng tiếp cận này là tìm ra những nhóm user tương tự nhau.
Từ đó, dự đoán mức độ yêu thích của một user dựa trên những users khác cùng nhóm.