Chương 1: Tổng quan về hệ thống tư vấn thông tin tuyển sinh PTIT
1.3 Phương pháp tiếp cận và giải quyết vấn đề
1.3.4 Công nghệ triển khai hệ thống
1.3.4.1.1. Flask
Flask là một framework web siêu nhẹ và dễ sử dụng trong ngôn ngữ lập trình Python, được phát triển để xây dựng ứng dụng web nhanh chóng và hiệu quả. Dựa trên triết học "micro" của nó, Flask tập trung vào cung cấp các công cụ cơ bản như định tuyến URL và xử lý HTTP requests, cho phép bạn xây dựng các ứng dụng web tùy chỉnh mà không bị ràng buộc bởi cấu trúc phức tạp.
Một số điểm nổi bật về Flask:
● Siêu nhẹ: Flask được thiết kế với mục tiêu là duyệt đơn giản và siêu nhẹ. Nó không yêu cầu nhiều dependencies bên ngoài và cho phép bạn tự do lựa chọn các thành phần bạn muốn sử dụng trong dự án của mình.
● Dễ học và sử dụng: Flask có cú pháp đơn giản và tài liệu rõ ràng, làm cho việc học và sử dụng nó rất dễ dàng, đặc biệt đối với người mới bắt đầu phát triển web.
● Định tuyến mạnh mẽ: Flask cho phép bạn xác định các định tuyến URL dễ dàng, đồng thời kết hợp với các hàm xử lý để quản lý các request và response.
● Thích hợp cho ứng dụng nhỏ và trung bình: Flask thích hợp cho việc xây dựng ứng dụng web vừa và nhỏ, đặc biệt là các ứng dụng prototype hoặc dự án cá nhân.
Flask là một framework có khả năng phát triển các ứng dụng web đáng tin cậy và mạnh mẽ. Điều này làm cho Flask trở thành một sự lựa chọn phổ biến trong cộng đồng phát triển Python cho việc xây dựng các dự án web đơn giản và tùy chỉnh.
Em đã sử dụng Flask để có thể xây dựng các API service phục vụ cho công việc ứng dụng android gửi yêu cầu xử lý và trả về các thông tin cần thiết
1.3.4.1.2 SQLite
SQLite là hệ quả trị cơ sở dữ liệu (DBMS) quan hệ tương tự như Mysql, Đặc điểm nổi bật của SQLite so với các DBMS khác là gọn, nhẹ, đơn giản, đặt biệt không cần mô hình server-client, không cần cài đặt, cấu hình hay khởi động nên không có khái niệm user, password hay quyền hạn trong SQLite Database. Dữ liệu cũng được lưu ở một file duy nhất.
SQLite thường không được sử dụng với các hệ thống lớn nhưng với những hệ thống ở quy mô vừa và nhỏ thì SQLite không thua các DBMS khác về chức năng hay tốc độ. Vì không cần cài đặt hay cấu hình nên SQLite được sử dụng nhiều trong việc phát triển, thử nghiệm … vì tránh được những rắc rối trong quá trình cài đặt.
Các ưu điểm của SQLite:
● Nhỏ gọn: SQLite chỉ là một tệp duy nhất, vì vậy nó dễ dàng tải xuống và cài đặt.
● Hiệu quả: SQLite được thiết kế để chạy trên các thiết bị có tài nguyên hạn chế.
● Mã nguồn mở: SQLite là mã nguồn mở, vì vậy nó có thể được sửa đổi và tùy chỉnh theo nhu cầu.
● Dễ sử dụng: SQLite sử dụng ngôn ngữ SQL tiêu chuẩn, vì vậy nó dễ dàng học và sử dụng.
SQLite được em sử dụng trong đồ án với vai trò là nơi lưu trữ các thông tin thực thể cần thiết cho hệ thống như các thông tin về trường, thông tin về ngành học, … SQLite được đặt tại khối API Service phục vụ cho việc các Service truy vấn dữ liệu và lấy ra các thông tin dữ liệu cần thiết và trả về cho ứng dụng Mobile
1.3.4.2 Phía Client 1.3.4.2.1 Android Studio
Android Studio là môi trường phát triển tích hợp (IDE) chính thức để phát triển ứng dụng Android. Nó được phát triển bởi Google và dựa trên IDE Java IntelliJ của hãng JetBrains. Android Studio cung cấp một loạt các tính năng và công cụ giúp các nhà phát triển tạo ra các ứng dụng Android chất lượng cao.
Các tính năng chính của Android Studio:
● Giao diện người dùng thân thiện và dễ sử dụng: Android Studio được thiết kế với giao diện người dùng trực quan và dễ sử dụng. Các nhà phát triển có thể dễ dàng tìm thấy các tính năng và công cụ cần thiết để phát triển ứng dụng
Android.
● Hỗ trợ các ngôn ngữ lập trình: Android Studio hỗ trợ các ngôn ngữ lập trình Java, Kotlin, C++, và C. Các nhà phát triển có thể chọn ngôn ngữ lập trình phù hợp với nhu cầu của mình.
● Các công cụ phát triển tích hợp: Android Studio cung cấp một loạt các công cụ phát triển tích hợp giúp các nhà phát triển tạo ra các ứng dụng Android nhanh hơn và hiệu quả hơn. Các công cụ này bao gồm:
● Trình soạn thảo mã: Trình soạn thảo mã của Android Studio được tích hợp các tính năng nâng cao như tự động hoàn thành, kiểm tra lỗi, và gợi ý từ khóa.
● Trình quản lý dự án: Trình quản lý dự án của Android Studio giúp các nhà phát triển dễ dàng quản lý các dự án ứng dụng Android của mình.
● Trình xây dựng: Trình xây dựng của Android Studio giúp các nhà phát triển nhanh chóng xây dựng và triển khai các ứng dụng Android.
● Trình mô phỏng: Trình mô phỏng của Android Studio giúp các nhà phát triển kiểm tra và gỡ lỗi các ứng dụng Android của mình trên các thiết bị ảo.
1.3.4.2.2 Android Jetpack
Android Jetpack là một bộ công cụ và thư viện hỗ trợ mạnh mẽ được phát triển bởi Google để giúp nhà phát triển xây dựng ứng dụng Android hiệu quả, ổn định và dễ quản lý hơn. Android Jetpack cung cấp một cơ sở vững chắc cho việc phát triển ứng dụng bằng cách giảm bớt sự phức tạp, tối ưu hóa việc quản lý vòng đời và cung cấp
các công cụ mạnh mẽ cho việc làm việc với giao diện người dùng, dữ liệu, và các tính năng chung.
Gói Android Jetpack bao gồm nhiều thành phần khác nhau, một số ví dụ như:
● AppCompat: Đảm bảo ứng dụng hoạt động mượt mà trên các phiên bản Android khác nhau.
● ViewModel: Giúp quản lý dữ liệu và trạng thái ứng dụng trong suốt quá trình hoạt động của ứng dụng, giúp tránh rò rỉ bộ nhớ và giúp vượt qua sự hủy bỏ và tái khởi động hoạt động.
● Room: Thư viện cơ sở dữ liệu dễ sử dụng để làm việc với SQLite, cung cấp một cách thuận tiện để lưu trữ và truy vấn dữ liệu trong ứng dụng.
● Navigation: Giúp quản lý quá trình điều hướng giữa các màn hình và sự chuyển đổi giữa các phân đoạn (Fragments) trong ứng dụng.
● LiveData: Thông báo về các thay đổi trong dữ liệu và tự động cập nhật giao diện người dùng khi có thay đổi.
1.3.4.2.3 Coroutine
Coroutines là một khái niệm quan trọng trong lập trình Android hiện đại, cho phép chúng ta thực hiện các tác vụ không đồng bộ một cách hiệu quả và dễ dàng. Nó là một phần của thư viện Kotlin, và được hỗ trợ bởi Android Jetpack. Coroutines cho phép chúng ta viết mã xử lý không đồng bộ một cách tự nhiên, gần gũi với cú pháp Kotlin, giúp tạo ra mã dễ đọc và dễ bảo trì.
Chức năng của Coroutines: Xử Lý bất đồng bộ: Một trong những chức năng quan trọng nhất của coroutines là khả năng xử lý các tác vụ không đồng bộ. Coroutines giúp đơn giản hóa việc xử lý các tác vụ như gọi API, thao tác với cơ sở dữ liệu, và tương tác với các tác vụ I/O.
Luồng Thực Thi: Coroutines cho phép quản lý và điều khiển các luồng thực thi một cách tường minh. Có thể tạo ra và quản lý nhiều luồng trong một coroutine, giúp tận dụng tốt hơn khả năng đa nhiệm của thiết bị.
Coroutine Context và Dispatcher: Mỗi coroutine trong Kotlin đều có một context được thể hiện bằng một instance của interface Coroutine Context. Context này là một tập các element cấu hình cho coroutine. Các loại element trong coroutine context gồm:
● Job: nắm giữ thông tin về lifecycle của coroutine
● Dispatcher: Quyết định thread nào mà coroutine sẽ chạy trên đó. Có các loại dispatcher sau:
● Dispatchers.Main: chạy trên main UI thread
● Dispatchers.IO: chạy trên background thread của thread pool. Thường được dùng khi Read, write files, Database, Networking
● Dispatchers.Default: chạy trên background thread của thread pool. Thường được dùng khi sorting a list, parse Json, DiffUtils
Điểm Mạnh của Coroutines:
● Đơn giản và dễ đọc hiểu: Coroutines sử dụng cú pháp Kotlin, giúp viết code dễ đọc, giảm thiểu callback hell và tránh callback spaghetti.
● Hiệu Năng Cao: Coroutines được tối ưu hóa để làm việc tốt trên Android và giảm độ trễ. Điều này giúp ứng dụng Android hoạt động mượt mà hơn.
● Quản lý Luồng dễ dàng: Coroutines cho phép bạn quản lý và đồng bộ hóa các luồng thực thi một cách tường minh, giúp tránh các vấn đề liên quan đến đa luồng.
Điểm Yếu của Coroutines:
● Khả năng rò rỉ bộ nhớ: Sử dụng coroutines một cách sai, ví dụ như không giải phóng tài nguyên, có thể dẫn đến rò rỉ bộ nhớ.
● Phức tạp khi xử lý lỗi: Xử lý lỗi trong coroutines có thể trở nên phức tạp, đặc biệt khi có nhiều luồng song song.
1.3.4.2.4 Retrofit + gson
Retrofit là một HTTP client type-safe cho Android và Java. Retrofit giúp dễ dàng kết nối đến một dịch vụ REST trên web bằng cách chuyển đổi API thành Java
Interface. Retrofit giúp dễ dàng xử lý dữ liệu JSON hoặc XML sau đó phân tích cú pháp thành Plain Old Java Objects (POJOs). Tất cả các yêu cầu GET, POST, PUT, PATCH, và DELETE đều có thể được thực thi.Giống như hầu hết các phần mềm mã nguồn mở khác, Retrofit được xây dựng dựa trên một số thư viện mạnh mẽ và công cụ khác. Đằng sau nó, Retrofit làm cho việc sử dụng OkHttp (từ cùng một nhà phát triển) để xử lý các yêu cầu trên mạng. Ngoài ra, Retrofit không tích hợp bất kỳ một bộ chuyển đổi JSON nào để phân tích từ JSON thành các đối tượng Java. Thay vào đó sẽ đi kèm với các thư viện chuyển đổi JSON để xử lý điều đó
1.3.4.2.5 Databinding
Trong sự kiện Google I/O 2015. Google đã giới thiệu đến một thư viện xử lý dữ liệu giữa tầng hiển thị và tầng dữ liệu có tên là Data Binding. Và cách sử dụng thư viện Data Binding này như sử dụng pattern Model-View-ViewModel (MVVM).
DataBinding là một công nghệ quan trọng trong lập trình ứng dụng Android, giúp tối ưu hóa việc làm việc với giao diện người dùng và dữ liệu trong ứng dụng.
DataBinding cho phép kết nối trực tiếp giữa các thành phần giao diện và dữ liệu của ứng dụng, giúp giảm thiểu phần lớn mã lập trình, tăng hiệu suất và sự bảo trì của ứng dụng.
Cách hoạt động của Data Binding là sử dụng một lớp trong XML được gọi là
"layout" để định nghĩa giao diện người dùng của ứng dụng. Trong layout này, bạn có thể sử dụng các biểu thức và thẻ để truy cập trực tiếp dữ liệu từ đối tượng Java hoặc Kotlin. DataBinding cũng giúp tạo ra mã lập trình dễ đọc hơn bằng cách tự động tạo ra các lớp Binding cho mỗi layout, cho phép bạn truy cập các thành phần giao diện và dữ liệu bằng cách gọi các phương thức đã được tạo sẵn. Điều này làm giảm sai sót và giúp làm việc với giao diện người dùng và dữ liệu dễ dàng hơn.