PHẦN MỞ ĐẦU 1. TÍNH CẤP THIẾT CỦA ĐỀ TÀI Thời đại công nghiệp hóa hiện đại hóa đất nước đã mở ra một kỉ nguyên mới, kỷ nguyên công nghệ số, chính vì điều đó mà số lượng các thiết bị thông minh ngày càng trở nên phổ biến và gắn liền với đời sống của con người. Trong số đó, điện thoại thông minh luôn được cho là thiết bị vượt trội và gắn bó với mỗi người ở mọi lứa tuổi và mọi hoàn cảnh, từ việc học tập đến giải trí. Hiểu rõ điều đó nên các ứng dụng được cài đặt trên smartphone ngày càng nhiều để phục vụ đời sống con người cũng như bắt kịp với nhu cầu phát triển của xã hội.
Nhận rõ được những khó khăn trong công tác quản lý và hỗ trợ đoàn viên của Đoàn trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh, thêm vào đó là hiểu rõ sự tiện nghi của điện thoại thông minh, nhóm đã nghiên cứu và Xây dựng ứng dụng hỗ trợ đoàn viên nhằm tạo ra những thay đổi tích cực, góp phần nâng cao chất lượng quản lý cũng như đưa thông tin từ phía Đoàn Trường, Đoàn Khoa đến với sinh viên một cách nhanh chóng nhất. ĐỐI TƯỢNG NGHIÊN CỨU Đối với đề tài này, đối tượng nghiên cứu dựa trên nhu cầu sử dụng của người quản lý và công tác quản lý và hoạt động rèn luyện. Đồng thời kèm theo đó là các công nghệ áp dụng tạo ra sản phẩm. Cụ thể như sau: - Tập trung nghiêm cứu công nghệ Spring Framework trong đó chú ý đến Spring MVC, và Java Core để xây dựng nên hệ thống các APIs hỗ trợ lấy dữ liệu một cách chính xác và nhanh chóng nhất.
- Áp dụng Hibernate làm kết nối đến hệ quản trị Cơ sở Dữ liệu MongoDB. - Về phần hiển thị cho người sử dụng cuối nhóm tiến hành nghiêm cứu Framework ReactJS và React Native, và một số thư viện được hỗ trợ cho React để xây dựng và xử lý giao diện và cho người dùng sử dụng. - Về phần bảo mật hệ thống, tiến hành nghiêm cứu công nghệ Json Web Token làm bảo mật cho hệ thống, tất cả các luồng dữ liệu vào ra đều được kiểm soát thông qua Token. Người dùng bắt buộc phải đăng nhập vào hệ thống để có một Token riêng và mỗi request từ phía người dùng đều phải thông qua một “cánh cửa” Interceptor và Token là “chìa khóa”.
1 do an - Về phần thông báo trên nhiều nền tảng ứng dụng sử dụng Google Firebase để thực hiện đẩy thông báo về ứng dụng. PHẠM VI NGHIÊN CỨU Đề tài này chủ yếu đi tập trung vào việc xử lý các nghiệp vụ của công tác quản lý các hoạt động rèn luyện đoàn viên như: tạo hoạt đông rèn luyện đoàn viên và thông báo tới ứng dụng, đăng kí tham gia và tạo danh sách cho đơn vị quản lý, đánh giá hoạt động, tạo bài kiểm tra bằng hình thức nhận diện khuôn mặt. Về phần Core, xây dựng đầy đủ các API phục vụ cho phần hiển thị cuối cùng. PHÂN TÍCH CÁC ỨNG DỤNG CÓ LIÊN QUAN Hầu hết các ứng dụng hỗ trợ Đoàn viên đã được xây dựng và ra mắt, có nhiều tính năng từ cơ bản đến phức tạp.
Tuy nhiên một số ứng dụng vẫn có nhược điểm sau: - Giao diện chưa thật sự bắt mắt và thu hút người dùng. - Xử lý API vẫn còn gặp nhiều khó khăn. - Tính năng của một số ứng dụng vẫn còn hạn chế. KẾT QUẢ DỰ KIẾN ĐẠT ĐƯỢC - Áp dụng ReactJS và React Native để xây dựng giao diện cho admin trên website và người dùng trên mobile.
- Sử dụng Spring Framework xây dựng được APIs cho các module trong hệ thống quản lý - Hoàn tất gửi thông báo cho người dùng về email để cung cấp mật khẩu, thông tin hoạt động bằng Google Firebase. Ý NGHĨA KHOA HỌC VÀ THỰC TIỄN Đề tài hướng đến khả năng tiếp thu, nâng cao kỹ năng lập trình, nghiên cứu công nghệ mới và trên hết là đáp ứng nhu cầu của việc đưa thông tin về các hoạt động của Đoàn Trường, Đoàn Khoa về đến các Chi đoàn và sinh viên một cách nhanh nhất. Mục đích để việc các hoạt động được tổ chức một cách tốt nhất, đồng thời không bị thiếu hụt số lượng sinh viên tham gia, danh sách điểm rèn luyện và công tác xã hội được nhất quán một cách cụ thể. 2 do an PHẦN NỘI DUNG CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.
SPRING FRAMEWORK – SPRING BOOT [1] ➢ Spring Framework Spring là một Framework phát triển các ứng dụng Java được sử dụng bởi hàng triệu lập trình viên. Nó giúp tạo các ứng dụng có hiệu năng cao, dễ kiểm thử, sử dụng lại code…Spring nhẹ và trong suốt (nhẹ: kích thước nhỏ, version cơ bản chỉ khoảng 2MB). 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. Dependency Injection (DI) là gì? o Có thể hiểu DI theo một cách đơn giản như sau: ▪ Các module không giao tiếp trực tiếp với nhau mà thông qua các Interface.
Module cấp thấp sẽ implement lại các interface, module cấp cao sẽ gọi module cấp thấp thông qua các interface. ▪ Việc khởi tạo các module cấp thấp sẽ do DI Container thực hiện. ▪ Việc module nào gắn với interface nào sẽ được config trong code hoặc trong file XML. ▪ DI được dùng để làm giảm sự phụ thuộc giữa các module, dễ dàng hơn trong việc thay đỏi module, bảo trì code và testing.
o Có ba dạng DI: ▪ Constructor Injection: Các dependency sẽ được container inject vào một class thông qua constructor của class đó. Đây là cách thông dụng nhất. ▪ Setter Injection: Các dependency sẽ được truyền vào class thông qua hàm setter. ▪ Interface Injection: Class cần inject sẽ implement một interface.
Interface này chứa hàm tên “Inject”. Container sẽ injection dependency vào một class thông qua việc gọi hàm “inject” của interface đó. Đây là cách rườm rà và ít được sử dụng 3 do an o Ngày nay, có nhiều DI Containers được sử dụng. Phổ biến trong java là Spring, BtterFly, Seasar Framework.
Có thể hiểu đơn giản, DI Containers là một phần trong framework. o Aspect Oriented Programming (AOP) lập trình hướng khía cạnh: là một kỹ thuật lập trình (kiểu như lập trình hướng đối tượng) nhằm phân tách chương trình thành cách moudule riêng rẽ, phân biệt, không phụ thuộc nhau. o Khi hoạt động, chương trình sẽ kết hợp các module lại để thực hiện các chức năng nhưng khi sửa đổi một chức năng thì chỉ cần sửa một module. o AOP không phải dùng để thay thế OOP mà để bổ sung cho OOP 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). Spring Framework được tổ chức theo kiểu module. Các tính năng được tổ chức thành khoảng 20 module. Các module này được phân nhóm thành Core Container, Data Access/Intergration, Web, AOP, Instrumentation, Messaging, và Test.
Tùy vào mục đích phát triển ứng dụng mà các nhà phát triển sử dụng một trong các module đó. Hình 1: Tổng quan về Spring Framework [1] [1 – Theo tài liệu tham khảo số 1] 4 do an ➢ Spring Boot - Spring boot là một module của Spring Framework, cung cấp tính năng RAD (Rapid Application Development) - Phát triển ứng dụng nhanh. - Spring boot dùng để tạo các ứng dụng độc lập dựa trên Spring. - Spring boot không yêu cầu cấu hình XML.
- Sping boot là một chuẩn cho cấu hình thiết kế phần mềm, tăng cao năng suất cho người phát triển phần mềm. HIBERNATE [2] Hibernate là 1 ORM Framework: thực hiện mapping cơ sở dữ liệu quan hệ sang các object trong ngôn ngữ hướng đối tượng. Hibernate là 1 Framework cho persistence layer: Thực hiện giao tiếp giữa tầng ứng dụng với tầng dữ liệu (kết nối, truy xuất, lưu trữ…). Kiến trúc Hibernate Framework: Hình 2: Kiến trúc Hibernate Framework [2] [2 – Tài liệu tham khảo số 2] 1.
REACT JS [3] React là một thư viện UI phát triển tại Facebook để hỗ trợ việc xây dựng những thành phần (components) UI có tính tương tác cao, có trạng thái và có thể sử 5 do an dụng lại được. React được sử dụng để viết Facebook trong các production, và instagram được viết hoàn toàn bằng React. Một trong những điểm hấp dẫn của React là thư viện này không chỉ hoạt động trên phía client, mà còn được render trên server và có thể kết nối với nhau. React so sánh sự thay đổi giữa các giá trị của lần render này với lần render trước và cập nhật ít thay đổi nhất trên DOM.
Công nghệ Virtual DOM giúp tăng hiệu năng cho ứng dụng. Việc chỉ node gốc mới có trạng thái và khi nó thay đổi sẽ tái cấu trúc lại toàn bộ, đồng nghĩa với việc DOM tree cũng sẽ phải thay đổi một phần, điều này sẽ ảnh hưởng đến tốc độ xử lý. React JS sử dụng Virtual DOM (DOM ảo) để cải thiện vấn đề này.Virtual DOM là một object Javascript, mỗi object chứa đầy đủ thông tin cần thiết để tạo ra một DOM, khi dữ liệu thay đổi nó sẽ tính toán sự thay đổi giữa object và tree thật, điều này sẽ giúp tối ưu hoá việc re-render DOM tree thật. Hình 3: Virtual DOM trong React [3] React sử dụng cơ chế one-way data binding – luồng dữ liệu 1 chiều.
Dữ liệu được truyền từ parent đến child thông qua props. Luồng dữ liệu đơn giản giúp chúng ta dễ dàng kiểm soát cũng như sửa lỗi. Với các đặc điểm ở trên, React dùng để xây dựng các ứng dụng lớn mà dữ liệu của chúng thay đổi liên tục theo thời gian. Dữ liệu thay đổi thì hầu hết kèm theo sự thay đổi về giao diện.
Ví dụ như Facebook: trên Newsfeed của bạn cùng lúc sẽ có các status khác nhau và mỗi status lại có số like, share, comment liên tục thay đổi. Khi đó React sẽ rất hữu ích để sử dụng. 6 do an Hình 4: One-way binding [3] [3 – Tài liệu tham khảo số 3] 1. JSON WEB TOKEN [4] Json Web Token (JWT) là một tiêu chuẩn mở (RFC 7519) định nghĩa cách thức truyền tin an toàn giữa các bên dưới dạng đối tượng JSON.
Thông tin này được xác minh và đáng tin cậy vì nó có chứa chữ ký số. JWT được mã hóa với một thuật toán bí mật (thuật toán HMAC) hoặc một public/private key sử dụng mã hóa RSA.