Công nghệ sử dụng

Một phần của tài liệu Xây dựng ứng dụng hỗ trợ kết nối và hỗ trợ trong học tập (Trang 93)

Chương 2 PHÂN TÍCH THIẾT KẾ VÀ XÂY DỰNG ỨNG DỤNG

2.3.2.Công nghệ sử dụng

2.3. Kiến thức nền tảng và công nghệ sử dụng

2.3.2.Công nghệ sử dụng

2.3.2.1. .NET Core11 Định nghĩa:

.NET Core là một nền tảng phát triển đa mục đích, mã nguồn mở giúp xây dựng ứng dụng cho Windows, macOS, và Linux sử dụng đa ngơn ngữ lập trình. Cung cấp các framework và API cho điện toán đám mây, IoT, UI và machine learning.

C#, Visual Basic, F# có thể được dùng để viết ứng dụng và thư viện cho .NET Core.

Ảnh 2.49: Logo .NET Core

81

Phiên bản đầu tiên: .NET Core 1.0 phát hành vào 27/6/2016. Phiên bản hiện tại: .NET 5 phát hành vào 11/2020.

Đặc điểm:

- Đa nền tảng: có thể chạy trên Window, macOS và Linux.

- Mã nguồn mở: áp dụng giấy phép MIT và Apache 2. .NET Core là một dự án thuộc .NET Foundation.

- Hiện đại: .NET Core thực thi các mơ hình hiện đại như lập trình bất đồng bộ, các mẫu không sao chép (no-copy patterns) bằng cách sử dụng structs, và quản trị tài nguyên cho các container.

- Hiệu năng: hiệu năng cao với các tính năng như hardware intrinsics, biên dịch theo tầng (tiered complication) và Span<T>.

- Phù hợp giữa các môi trường: xử lý code là như nhau trên nhiều hệ điều hành và

kiến trúc, bao gồm x64, x86 và ARM.

- Công cụ CMD: bao gồm công cụ dịng lệnh (command-line) để sử dụng, có thể

được sử dụng để phát triển cục bộ và tích hợp liên tục.

- Triển khai linh hoạt: có thể sử dụng .NET Core trong ứng dụng hoặc cài đặt nó

cạnh nhau. Có thể được sử dụng với Docker containers.

2.3.2.2. Application Programming Interface (API)

API (hay Giao diện lập trình ứng dụng) là các phương thức, giao thức kết nối với các thư viện và ứng dụng khác. Nó là viết tắt của Application Programming

Interface – giao diện lập trình ứng dụng. API cung cấp khả năng cung cấp khả năng truy xuất đến một tập các hàm hay dùng. Và từ đó có thể trao đổi dữ liệu giữa các ứng dụng.

Restful API được hiểu là một tiêu chuẩn được sử dụng để thiết kế API cho các ứng dụng website. Nhằm để quản lý các resource web một cách dễ dàng hơn. Có thể nói Restful là một trong những kiểu thiết kế API được các lập trình viên sử dụng khá phổ biến.

82

Theo đó Rest quy định cách sử dụng http method như GET, POST, PUT,

DELETE… và cách định dạng URL cho các ứng dụng web. API cũng có thể liên quan đến khung phần mềm : Khung có thể dựa trên một số thư viện triển khai một số API. Nhưng không giống như việc sử dụng API thông thường, quyền truy cập vào hành vi được xây dựng trong khung trung gian bằng cách mở rộng nội dung của nó với các lớp mới cắm vào khung chính nó.

2.3.2.3. React Native Định nghĩa: Định nghĩa:

React Native là 1 framework được xây dựng như 1 hệ thống cấp bậc của các UI component được viết bằng ngôn ngữ JavaScript.

Các UI component này sẽ tương ứng với các View của 2 platform Android và iOS. Và 1 điều nữa là React Native được phát triển bởi Facebook.

Ảnh 2.50: Cấu trúc của ứng dụng React Native12

83

React Hooks13:

Hooks được giới thiệu trong phiên bản React 16.8. Nó cho phép chúng ta có thể sử dụng state (trạng thái) trong Functional Component và các tính năng khác của React mà khơng cần phải dùng đến Class. (adsbygoogle = window.adsbygoogle || []).push({});

Ngồi việc sử dụng state ngay trong Functional Component, React Hooks còn giúp chúng ta giảm đáng kể lượng code, khiến các component trở nên gọn nhẹ và dễ tiếp cận hơn so với Class Component.

Quy tắc khi dùng Hooks:

- Chỉ gọi Hooks trên cùng. Không gọi Hooks bên trong vòng lặp, điều kiện, hoặc các hàm lồng nhau.

- Chỉ gọi Hooks từ các Functional Component. Không gọi Hooks từ hàm JavaScript bình thường.

React Redux:

Redux là một thư viện javascript giúp tạo ra một lớp quản lý trạng thái cho ứng dụng. Redux được xây dựng dựa trên nền tảng của ngôn ngữ Elm và kiến trúc Flux do Facebook giới thiệu nên nó thường được kết hợp với React.

84

Ảnh 2.51: React Redux14

Redux có 3 thành phần chính:

- Action: có thể hiểu là các event để gửi dữ liệu từ ứng đụng đến Store của Redux.

- Reducer: là các Pure Function (hàm nguyên thủy) lấy state hiện tại của ứng

dụng, thực hiện một action và trả về một state mới.

- Store: lưu trữ state của ứng dụng và nó là duy nhất trong một ứng dụng Redux.

Nguyên lý hoạt động của Redux:

- Khi cần thay đổi state thì ứng dụng sẽ phát sinh ra một action mô tả trạng thái. Action sẽ thực hiện điều phối Reducer để xử lý.

- Sau đó, Reducer sẽ dựa vào mô tả của Action để biết cần thực hiện thay đổi

những gì và bắt đầu xử lý.

85

- Khi state được cập nhật vào Store thì ứng dụng sẽ nhận được thông tin cập

nhập mới đó.

Ảnh 2.52: Nguyên lý hoạt động của Redux15

Sự cần thiết của React Native:

Với React Native Framework, bạn có thể render giao diện của cả 2 Android và iOS. Với React Native, chúng ta từ những lập trình viên Website có thể chuyển sang lập trình viên Di động rất dễ dàng.

86

Ảnh 2.53: React Native tương thích cả Android và IOS16

React Native phát triển tập trung vào giao diện để khiến người dùng cảm thấy mượt mà hơn. React Native đang được rất nhiều công ty công nghệ làm nền tảng phát triển ứng dụng của họ, điển hình là Facebook, Instagram, Tesla, …

Ảnh 2.54: React Native được chọn nhiều bởi các tập đồn cơng nghệ17

Nhờ có React Native mà khoảng cách giữa hai thị trường người dùng lớn, Android và iOS khơng cịn khoảng cách, vì React Native hỗ trợ cả hai.

16 Nguồn: https://www.solutionanalysts.com/

87 (adsbygoogle = window.adsbygoogle || []).push({});

2.3.2.4. MongoDB Cơ sở dữ liệu phi quan hệ: Cơ sở dữ liệu phi quan hệ:

NoSQL là 1 dạng CSDL mã nguồn mở và được viết tắt bởi: None-Relational SQL hay có nơi thường gọi là Not-Only SQL.

- NoSQL được phát triển trên Javascript Framework với kiểu dữ liệu là JSON và

dạng dữ liệu theo kiểu key và value.

- NoSQL ra đời như là 1 mảnh vá cho những khuyết điểm và thiếu sót cũng như

hạn chế của mơ hình dữ liệu quan hệ RDBMS (Relational Database Management System - Hệ quản trị cơ sở dữ liệu quan hệ) về tốc độ, tính năng, khả năng mở rộng, ...

- Với NoSQL bạn có thể mở rộng dữ liệu mà không lo tới những việc như tạo khóa ngoại, khóa chính, kiểm tra ràng buộc, …

- NoSQL bỏ qua tính toàn vẹn của dữ liệu và transaction để đổi lấy hiệu suất nhanh và khả năng mở rộng.

- NoSQL được sử dụng ở rất nhiều công ty, tập đồn lớn, ví dụ như FaceBook sử

dụng Cassandra do FaceBook phát triển, Google phát triển và sử dụng BigTable, …

Mongo DB 18:

Ảnh 2.55: Logo Mongo DB

- MongoDB là một hệ quản trị cơ sở dữ liệu mã nguồn mở, là CSDL thuộc NoSql

và được hàng triệu người sử dụng.

88

- MongoDB là một database hướng tài liệu (document), các dữ liệu được lưu trữ

trong document kiểu JSON thay vì dạng bảng như CSDL quan hệ nên truy vấn sẽ rất nhanh.

- Với CSDL quan hệ chúng ta có khái niệm bảng, các cơ sở dữ liệu quan hệ (như

MySQL hay SQL Server...) sử dụng các bảng để lưu dữ liệu thì với MongoDB chúng ta sẽ dùng khái niệm là collection thay vì bảng

- So với RDBMS thì trong MongoDB collection ứng với table, cịn document sẽ

ứng với row, MongoDB sẽ dùng các document thay cho row trong RDBMS.

- Các collection trong MongoDB được cấu trúc rất linh hoạt, cho phép các dữ liệu

lưu trữ không cần tuân theo một cấu trúc nhất định.

- Thông tin liên quan được lưu trữ cùng nhau để truy cập truy vấn nhanh thơng

qua ngơn ngữ truy vấn MongoDB Tính chất của Mongo DB:

Ưu điểm :

- Do MongoDB sử dụng lưu trữ dữ liệu dưới dạng Document JSON nên mỗi một

collection sẽ có các kích cỡ và các document khác nhau, linh hoạt trong việc lưu trữ dữ liệu, nên bạn muốn gì thì cứ insert vào thoải mái.

- Dữ liệu trong MongoDB khơng có sự ràng buộc lẫn nhau, khơng có join như trong RDBMS nên khi insert, xóa hay update nó khơng cần phải mất thời gian kiểm tra xem có thỏa mãn các ràng buộc dữ liệu như trong RDBMS.

- MongoDB rất dễ mở rộng (Horizontal Scalability). Trong MongoDB có một khái niệm cluster là cụm các node chứa dữ liệu giao tiếp với nhau, khi muốn mở rộng hệ thống ta chỉ cần thêm một node với vào cluster. (adsbygoogle = window.adsbygoogle || []).push({});

- Trường dữ liệu “_id” luôn được tự động đánh index (chỉ mục) để tốc độ truy vấn

thông tin đạt hiệu suất cao nhất.

- Khi có một truy vấn dữ liệu, bản ghi được cached lên bộ nhớ Ram, để phục vụ

lượt truy vấn sau diễn ra nhanh hơn mà không cần phải đọc từ ổ cứng.

- Hiệu năng cao: Tốc độ truy vấn (find, update, insert, delete) của MongoDB nhanh hơn hẳn so với các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS). Với một

89

lượng dữ liệu đủ lớn thì thử nghiệm cho thấy tốc độ insert của MongoDB có thể nhanh tới gấp 100 lần so với MySQL.

Nhược điểm:

- Một ưu điểm của MongoDB cũng chính là nhược điểm của nó. MongoDB

khơng có các tính chất ràng buộc như trong RDBMS nên khi thao tác với mongoDB thì phải hết sức cẩn thận.

- Tốn bộ nhớ do dữ liệu lưu dưới dạng key-value, các collection chỉ khác về value do đó key sẽ bị lặp lại. Khơng hỗ trợ join nên dễ bị dư thừa dữ liệu.

- Khi insert/update/remove bản ghi, MongoDB sẽ chưa cập nhật ngay xuống ổ cứng, mà sau 60 giây MongoDB mới thực hiện ghi toàn bộ dữ liệu thay đổi từ RAM xuống ổ cứng điều này sẽ là nhược điểm vì sẽ có nguy cơ bị mất dữ liệu khi xảy ra các tình huống như mất điện...

MongoDB .NET Driver:

MongoDB .NET Driver là một thư viện mã nguồn mở được cung cấp bởi MongoDB để thực hiện tương tác với hệ cơ sở dữ liệu Mongo bằng ngôn ngữ C# trên nền .NET Core (hoặc .NET Framework).

2.3.2.5. Firebase Cloud Messaging

Firebase Cloud Messaging (FCM), còn được biết với tên là Google Cloud Messaging là một giải pháp mã nguồn mở cho thông báo và tin nhắn trên Android, iOS và Website. FCM cho phép nhà phát triển bên thứ ba gửi thông báo hoặc tin nhắn từ máy chủ tới các nền tảng phía người dùng cuối theo thời gian thực.

Kiến trúc của FCM gồm 3 mô-đun, server FCM, một máy chủ bên thứ ba được chúng ta phát triển và ứng dụng người dùng cuối. Các ứng dụng này nhận diện nhau bằng server-key và device-token.

90

Ảnh 2.56: Kiến trúc FCM

2.3.2.6. Azure App Service

Azure App Service19 là công nghệ đám mây của Microsoft cho phép chúng ta triển

khai những ứng dụng web, backends của ứng dụng di động cũng như các API lên nền tảng đám mây. Đây là nền tảng không phân biệt ngơn ngữ lập trình và có thể hỗ trợ triển khai tự động từ nhiều nền tảng quản lý mã nguồn như Github, Azure DevOps, Gitlab, …

Ảnh 2.57: Logo Azure App Service

91

2.3.2.7. SMTP

SMTP 20 là viết tắt của Simple Mail Transfer Protocol, nghĩa là giao thức truyền tải thư tín đơn giản. SMTP nằm ở tầng ứng dụng. Khi client muốn gửi thư phải kết nối tới máy chủ để thực hiện hoạt động gửi thư này. Máy chủ SMTP luôn luôn ở chế độ chờ kết nối đến, khi nhận yêu cầu thì kết nối sẽ bắt đầu ở Port 25.

Ảnh 2.58: Hoạt động của giao thức SMTP

2.3.2.8. ConnectyCube Calling API

ConnectyCube Calling API được xây dựng dựa trên giao thức WebRTC21 và kiến

trúc WebRTC Mesh. Nó cho phép chúng ta tích hợp tính năng gọi video một cách dễ dàng vào ứng dụng React Native. (adsbygoogle = window.adsbygoogle || []).push({});

20 Nguồn: SMTP on BKHost

21 WebRTC (Web Real-Time Communication) là một web API được phát triển bởi World Wide Web Consortium (W3C), khả năng hỗ trợ trình duyệt (browser) giao tiếp với nhau thông qua VideoCall, VoiceCall hay transfer data "Peer-to-Peer" (P2P) mà không cần browser phải cài thêm plugins hay phần mềm hỗ trợ nào từ bên ngoài. (https://vi.wikipedia.org/wiki/WebRTC)

92

Ảnh 2.59: Thư viện ConnectyCube22

2.4. Triển khai hệ thống 2.4.1. Máy chủ 2.4.1. Máy chủ

Máy chủ được triển khai trên IIS (Internet Information Services) của hệ điều hành Windows. Mọi máy tính có cài đặt hệ điều hành họ nhà Windows này (như Windows 10, Windows Server, …) điều có cách triển khai ứng dụng như vậy.

93

Đầu tiên, ta tạo bản biên dịch của dự án bằng phần mềm Visual Studio. Kết quả như sau:

Ảnh 2.60: Kết quả build mã nguồn máy chủ

Để máy tính (hoặc server) có thể chạy được ứng dụng .NET Core chúng ta cần phải có .NET Core Hosting Bundle, đây là một phần mềm cung cấp bởi Microsoft dùng cho việc triển khai các ứng dụng .NET Core lên các nền tảng. Sau khi cài đặt xong, khởi động IIS Manager lên và tạo Website mới như hình dưới đây:

94

Ảnh 2.61: Giao diện tạo website của IIS Manager Theo ảnh trên, chúng ta cần quan tâm tới các trường: Theo ảnh trên, chúng ta cần quan tâm tới các trường:

- Site name: Tên ứng dụng web.

- Physical Path: Đường dẫn của thư mục ta đã biên dịch ở bước trước.

- IP Address: Ip tĩnh của máy bạn, hoặc của VPS, server, …

- Type: Http/Https – loại chứng chỉ HTTP cần đạt.

- Port: Cổng mạng. Cổng này phải được mở Firewall23.

95

Sau khi triển khai xong chúng ta có thể truy cập bằng Url được cung cấp bởi IIS Manager:

Ảnh 2.62: URL cung cấp bởi IIS Manager

Bên cạnh đó, với việc có cài đặt hệ thống truy vết API trong mã nguồn, chúng ta cũng có thể theo dõi được hành vi của các client, từ đó có thể kiểm sốt và khắc phục lỗi.

Ảnh 2.63: Việc thực hiện truy vết có thể ảnh hưởng khả năng tìm ra và khắc phục lỗi

96

2.4.2. Trang dành cho quản trị viên

Trang dành cho quản trị viên được viết bằng nền tảng .NET Core 3.1, giống như máy chủ, nên việc triển khai hoàn toàn giống các bước ở phần 4.3.1.

2.4.3. Ứng dụng di động

Ứng dụng được xuất bản dưới định dạng file .APK (định dạng phổ biến của hệ điều hành Android và được cài lên máy ảo (Bluestack), máy thật (Xiaomi Mi 8 – Android 10.0, Nokia 6.1 – Android 9.0). Ứng dụng hiện chạy ổn trên các thiết bị này.

97

Chương 3. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

3.1. Kết quả đạt được (adsbygoogle = window.adsbygoogle || []).push({});

Thông qua việc nghiên cứu và tìm hiểu nhiều cơng nghệ, đặc biệt là những công nghệ mới, chúng em đã xây dựng được ứng dụng hỗ trợ kết nối và hỗ trợ trong học tập tương đối hoàn chỉnh. Do giới hạn về kinh phí và thời gian cũng như năng lực cá nhân, ứng dụng chỉ đang dừng lại ở mức chạy thử, chưa thể triển khai rộng rãi ở cộng đồng. Tuy nhiên, với những kết quả chạy thử khả quan, nhóm tự tin ứng dụng có thể mở rộng và phát triển thêm trong tương lai.

Về mặt kĩ thuật, chúng em đã đạt được những kết quả như sau:

- Tìm hiểu được .NET Core và sử dụng nó để xây dựng server cho ứng dụng.

Bên cạnh đó, việc nghiên cứu và sử dụng các design pattern trong ngơn ngữ lập trình C# vào mã nguồn của server khiến cho dự án dễ mở rộng hơn, tối ưu hơn.

- Tìm hiểu và sử dụng được React Native cũng như các thư viện liên quan trong xây dựng ứng dụng di động.

- Sử dụng được phần mềm Figma trong thiết kế giao diện người dùng. Cũng

như các nguyên tắc phối màu theo chủ đề trong giao diện.

- Áp dụng được những kiến thức đã tìm hiểu về Firebase Cloud Messaging để

tạo thông báo cho ứng dụng. Sử dụng được các dịch vụ cloud như Firebase Storage, Firebase Authentication để làm một trong các phương thức xác thực của ứng dụng.

- Tìm hiểu và triển khai máy chủ trong nền tảng đám mây như VPS, Cloud để

sử dụng ở mạng bên ngoài (IIS - Windows Server, Ubuntu Server)

Một phần của tài liệu Xây dựng ứng dụng hỗ trợ kết nối và hỗ trợ trong học tập (Trang 93)