Tải bản đầy đủ (.doc) (67 trang)

ĐỒ ÁN CHUYÊN NGÀNH 2: ỨNG DỤNG MẠNG XÃ HỘI ĐA NỀN TẢNG. Giảng viên hướng dẫn: TS. NGUYỄN HOÀNG HẢI

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.38 MB, 67 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN &
TRUYỀN THÔNG VIỆT HÀN

Khoa Khoa Học Máy Tính

ĐỒ ÁN CHUYÊN NGÀNH 2

ỨNG DỤNG MẠNG XÃ HỘI
ĐA NỀN TẢNG
Sinh viên thực hiện 1 :

ĐỖ PHƯỚC THIỆN

Lớp

17IT1

:

Sinh viên thực hiện 2 :

PHAN TẤN TĨNH

Lớp

17IT2

:

Giảng viên hướng dẫn: TS. NGUYỄN HOÀNG HẢI
Đà nẵng, tháng 5 năm 2021




NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................


LỜI CẢM ƠN
Lời đầu tiên, em xin cảm ơn đến tồn thể các q thầy cơ giáo khoa Khoa học máy
tính – trường Đại học Cơng nghệ thơng tin và truyền thông Việt Hàn đã luôn đồng hành
và hỗ trợ, hướng dẫn các bài giảng để sinh viên như em có một nền tảng cơ bản, tạo tiền
đề để thực hiện một đồ án thành công.
Em cũng xin gửi lời cảm ơn đến Thầy Nguyễn Hoàng Hải, thầy đã định hướng các
yêu cầu đề tài để giúp em có thể chọn được một đề tài phù hợp với khả năng của mình.
Thầy đã giảng giải rất rõ các yêu cầu đồ án của nhà trường để nhóm em phát triển dự
theo đúng định hướng – không bị sai lệch vào giai đoạn đầu. Thầy cũng đã có tư vấn về
mặt kỹ thuật để nhóm em có thể phát triển ứng dụng tốt hơn. Nhờ sự giúp đỡ rất lớn từ
thầy mà nhóm em mới có một kết quả và báo cáo cuối cùng rất hoàn thiện.

Sinh viên 1

Sinh viên 2

Thiện

Tĩnh



MỤC LỤC
Trang

MỞ ĐẦU..............................................................................................................1
1.

Giới thiệu và mục tiêu đề tài.......................................................................1

2.

Nội dung và kết quả thực hiện....................................................................1

3.

Bố cục báo cáo..............................................................................................3

CHƯƠNG 1 GIỚI THIỆU TỔNG QUAN........................................................4
1.

BỐI CẢNH THỰC HIỆN ĐỀ TÀI.............................................................4

2.

VẤN ĐỀ CẦN GIẢI QUYẾT......................................................................4

3.

NỘI DUNG THỰC HIỆN...........................................................................4


4.

PHƯƠNG PHÁP TRIỂN KHAI.................................................................5

CHƯƠNG 2 NGHIÊN CỨU TỔNG QUAN....................................................6
1.

CÁC NỀN TẢNG ỨNG DỤNG PHỔ BIẾN NHẤT HIỆN CÓ................6

2.

CÁC PHƯƠNG PHÁP XÂY DỰNG ỨNG DỤNG....................................6

3.

2.1

Xây dựng ứng dụng trên nền tảng di động.............................................6

2.2

Xây dựng ứng dụng trên nền tảng Web..................................................7

2.3

Xây dựng Back-end cho ứng dụng.........................................................7

PHÂN TÍCH ƯU VÀ NHƯỢC ĐIỂM CỦA CÁC PHƯƠNG PHÁP XÂY

DỰNG ỨNG DỤNG.........................................................................................................13


4.

3.1

Phương pháp xây dựng ứng dụng trên nền tảng di động......................13

3.2

Phương pháp xây dựng ứng dụng nền tảng Web..................................14

3.3

Xây dựng Back-end..............................................................................17

LỰA CHỌN PHƯƠNG PHÁP XÂY DỰNG TỐT NHẤT......................22

CHƯƠNG 3 PHÂN TÍCH THIẾT KẾ HỆ THỐNG......................................23
1.

MƠ HÌNH TỔNG QUAN CỦA HỆ THỐNG NGHIÊN CỨU...............23
1.1.

Định nghĩa bài toán của ứng dụng........................................................23


2.

1.2.


Các nhóm chức năng của ứng dụng......................................................24

1.3.

Xác định các tác nhân..........................................................................24

1.4

Xác định các use case...........................................................................24

THIẾT KẾ CÁC BIỂU ĐỒ CHI TIẾT....................................................25
2.1

Biểu đồ usecase....................................................................................25

2.2

Biểu đồ hoạt động................................................................................25

2.3

Biểu đồ trình tự....................................................................................28

2.4

Biểu đồ lớp...........................................................................................31

CHƯƠNG 4 TRIỂN KHAI XÂY DỰNG........................................................32
1.


MERN STACK...........................................................................................32

2.

PHÂN TÍCH BACK-END.........................................................................32

3.

2.1

Phân tích tài nguyên, cấu trúc dữ liệu (Model).....................................32

2.2

Thiết kế API chuẩn RESTful................................................................33

2.3

Thiết kế và xác định Controller (function) tương ứng với từng API....34

2.4

Thống nhất chung về cấu trúc phản hồi................................................35

XÂY DỰNG MÃ NGUỒN.........................................................................35
3.1 Cài đặt và thiết lập môi trường..................................................................35
3.2 Tạo và thiết lập Express Server................................................................36
3.3 Cài đặt Nodemon, Middleware, Cors, Body Parser..................................36
3.4 Biến môi trường Environment Variables (.env) & Connect Server với


MongoDB Atlas (sử dụng mongoose)......................................................................37
3.5 Tạo Auth Route, Auth Controller...............................................................38
3.6 Schema & Schema Validation + Mongoose 'timestamps' option...............40
3.7 Mã hóa password và tạo tolen key.............................................................41
3.8 Tạo/Chỉnh sửa/Xóa/Lấy Post.....................................................................42
3.9 Kiểm tra trạng thái người dùng.................................................................44
3.10 Cài đặt React và phân tích Layout...........................................................45
3.11 Code giao diện tĩnh HTML/CSS trên Web..............................................45
CHƯƠNG 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN..................................54


1

2

KẾT LUẬN.................................................................................................54
1.1

Kết quả đạt được..................................................................................54

1.2

Hạn chế:...............................................................................................60

HƯỚNG PHÁT TRIỂN.............................................................................60

DANH MỤC TÀI LIỆU THAM KHẢO...........................................................130


DANH MỤC HÌNH VẼ


Hình 1 - Sơ đồ kết nối với Web Server..................................................................9
Hình 2 - Cách thức kết nối với PHP Extention......................................................9
Hình 3 - Cấu trúc nền tảng Node Runtime..........................................................10
Hình 4 - So sánh giữa Blocking I/O (trái) và Non-Blocking I/O (phải)...............11


MỞ ĐẦU
1.

Giới thiệu và mục tiêu đề tài
Lợi ích mà mạng xã hội mang lại giúp chúng ta nắm bắt thông tin nhanh nhạy

hơn, kết nối được mọi người và cộng đồng. Đó cũng là phương tiện truyền thơng, kinh
doanh rất hiệu quả. Mạng xã hội phát triển mở ra một hướng đi mới, mang ý nghĩa tích
cực cho những ai biết tận dụng và kiểm sốt nó. Sử dụng đúng mục đích, mạng xã hội
sẽ trở thành một kênh giải trí hiệu quả giúp chúng ta thư giãn sau một ngày làm việc
căng thẳng. Tuy nhiên Việt Nam không phải là ông chủ của hầu hết các ứng dụng
mạng xã hội phổ biến nhất hiện nay cho nên tất cả các dữ liệu người dùng Việt Nam
bao gồm ảnh, thông tin cá nhân, thông tin các mối quan hệ và vị trí truy cập được nắm
giữ bởi bên thứ ba ở ngoài lãnh thổ nước ta. Vừa rồi đã xảy ra một sự kiện chấn động
đó là hàng loạt ảnh chụp chứng minh nhân dân của công dân Việt Nam bị rao bán trên
cộng đồng diễn đàn đen của Hacker. Từ đó, tội phạm sẽ sử dụng các thơng tin cá nhân
quan trọng của người dung để giả danh, thực hiện các hành vi trái pháp luật. Ngoài ra,
phổ biến nhất hiện nay đó là các cơng ty tổ chức sẽ mua lại các dữ liệu người dùng này
để phục vụ các hoạt động quảng cáo và truyền thông. Chúng ta có thể thấy rằng, bảo
mật dữ liệu là một vấn đề hết sức quan trọng. Bước đầu tiên để bảo mật dữ liệu người
dùng Việt Nam đó là xây dựng riêng một mạng xã hội, không phục thuộc vào bên thứ
ba. Hiểu được vấn đề trên cho nên chúng em tiến hành phân tích thiết hệ thống và triển
khai xây dựng ứng dụng mạng xã hội với các chức năng cơ bản - tạo cơ sở để sau này

phát triển một ứng dụng mạng xã hội thực thụ với đầy đủ các chức năng như các mạng
xã hội đang thịnh hành.
2.

Nội dung và kết quả thực hiện
Tìm hiểu về MERN Stack. MongoDB – document database; Expressjs – Nodejs

framework; Reactjs – a client-side Javascript framework; Nodejs – the premier
Javascript web server.
Setup các package cần thiết cho ứng dụng như nodemon, middlware, cors,
body parser.

1


Bài toán tạo tài khoản với id, username, password – cấp phát tài khoản. Lưu các
dữ liệu này vào cơ sở dữ liệu và truy xuất ngược lên mỗi khi người dùng đăng nhập
hoặc tạo sửa xóa bài post. Thiết kế qui trình đăng ký và đăng nhập.
Mỗi bài viết sẽ cần có id của tác giả và thời gian tạo bài viết
Thời gian
Tuần thứ 1

Nội dung thực hiện
Tìm hiểu về MERN Stack MongoDB – document database; Expressjs –

từ ngày 22 đến

Nodejs framework; Reactjs – a client-side Javascript framework; Nodejs –

ngày 28 tháng 3


the premier Javascript web server
Tìm hiểu về code để xây dựng server – code backend. Setup các package

Tuần thứ 2

cần thiết

cho ứng dụng như nodemon, middlware, cors, body parser.

từ ngày 29 đến

Connect server với MongoDB (sử dụng mongoose). Thiết kế qui trình đăng

ngày 4 tháng 4

kí, đăng nhập. Tạo Route, Auth Controller + test và tạo biến môi trường bằng

Tuần thứ 3

Postman.
Code back-end. Xây dựng Schema, Schema Validation cho cơ sở dữ liệu +

từ ngày 5 đến

Mongoose ‘timestamps’ option để get date cho bài post.

ngày 11 tháng 4
Tuần thứ 4
từ ngày 12 đến

ngày 18 tháng 4
Tuần thứ 5
từ ngày 19 đến
ngày 25 tháng 4
Tuần thứ 6
từ ngày 26 đến

Kết nối User Modek với authController + ‘Async/Await’ Function.
Code backend. Xây dựng chức năng mã hóa password. Xây dựng chức
năng. Xây dựng các chứng năng tạo/chỉnh sửa/xóa bài post.
Code backend. Xây dựng chức năng. Xây dựng các chứng năng tạo/chỉnh
sửa/xóa bài post.
Code backend. Xây dựng chức năng. Xây dựng các chứng năng tạo/chỉnh
sửa/xóa bài post.

ngày 2 tháng 5
Tuần thứ 7

Code backend. Xây dựng chức năng. Xây dựng các chứng năng tạo/chỉnh

từ ngày 3 đến

sửa/xóa bài post. Loại bỏ một số Field khi lấy bài post. Kiểm tra trạng thái

ngày 9 tháng 5

người dùng
Code frontend. Cài đặt React và phân tích layout (Các components). Code

Tuần


thứ

8

từ ngày 10 đến
ngày 16 tháng 5
Tuần

thứ

giao diện tĩnh (HTML + CSS).
Thiết lập Route trong React. Tìm hiểu về State, Context, Dispatch,

Reducer.
9
Tạo InitialState và thiết lập AppReducer. Tạo và kiểm tra AppContext bằng
2


React Dev Tool. Cài đặt axios, Thiết lập proxy+reset, test. Thiết lập và xử lý
từ ngày 17 đến người dùng login.
ngày 23 tháng 5

Thiết lập và xử lý người dùng register. Cập nhật Navbar theo trạng thái
người dùng. Check current User và cập nhật frontend.

3.

Bố cục báo cáo

Chương 1. Giới thiệu tổng quan
Chương 2. Nghiên cứu tổng quan
Chương 3. Phân tích thiết kế hệ thống
Chương 4. Triển khai xây dựng
Chương 5. Kế luận và hướng phát triển

3


Chương 1

GIỚI THIỆU TỔNG QUAN

BỐI CẢNH THỰC HIỆN ĐỀ TÀI

1.

Ngày nay, với sự phát triển của ngành Công Nghệ Thông Tin. Sự cạnh tranh sở
hữu người dùng của các ông lớn mạng xã hội thế giới tại các thị trường càng khốc liệt.
Sự gia tăng tốc độ số lượng người dùng, biên độ tuổi người dùng ngày càng lớn cho
thầy nhu cầu sử dụng mạng xã hội của con người đang phát triển mạnh. Nhưng bên
cạnh đó, một mối nguy hiểm tiềm tàng đi kèm với sự gia tăng này đó là bảo mật dữ
liệu người dùng. Hầu hết các ứng dụng phổ biến tại Việt Nam hiện nay như Facebook,
Twitter, Instagram, Pinterest đều thuộc quyền sở hữu công ty không thuộc Việt Nam.
Cho nên các nguồn lợi nhuận thu được và các dữ liệu người dùng sẽ không do Việt
Nam trực tiếp quản lý.
Hiện tại có 3 nền tảng có nhiều người dùng nhiều nhất đó là: Android, IOS và
Web. Nếu xây dựng một ứng dụng chỉ chạy được trên một trong ba nền tảng thì sẽ mất
lượng người dùng ở các nền tảng còn lại.


VẤN ĐỀ CẦN GIẢI QUYẾT

4.

Một ứng dụng mạng xã hội do người Việt xây dựng và quản lý, nằm trong
khuôn khổ pháp luật của nhà nước Việt Nam thì sẽ an tồn dữ liệu người dùng hơn so
với các ứng dụng mạng xã hội đang phổ biến hiện tại của các bên thứ 3. Ngoài ra, ứng
dụng phải được phát trên cả ba ứng dụng để có số lượng người dùng đơng đảo nhất.
Do đó, nhóm em sẽ thực hiện đề tài này để nghiên cứu và xây dựng một mạng
xã hội đa nền tảng để giải quyết tương đối các vấn đề ở bối cảnh hiện tại.

NỘI DUNG THỰC HIỆN

5.
-

Nghiên cứu tổng quan:
o Các nền tảng ứng dụng phổ biến nhất
o Giới thiệu các phương pháp xây dựng ứng dụng
 Xây dựng ứng dụng trên nền tảng di động
 IOS
 Android
 Xây dựng ứng dụng trên nền tảng Web
4


o Phân tích các phương pháp xây dựng ứng dụng
 Phương pháp xây dựng trên nền tảng di động
 IOS
 Android

 Phương pháp xây dựng trên nền tảng Web
-

Phân tích thiết kế hệ thống:
o Mơ hình tổng quan của hệ thống
o Thiết kế các biểu đồ chi tiết

-

Triển khai xây dựng

-

Đưa ra các hướng phát triển

PHƯƠNG PHÁP TRIỂN KHAI

6.
-

Tìm kiếm và so sánh các ý tưởng để chọn ra ý tưởng của đề tài.

-

Phân tích các mối hiểm họa về an toàn dữ liệu của người dùng, các mối hiểm
họa khi công ty của ứng mạng xã hội trở nên phát triển quá mạnh.

-

Tìm hiểu về các ứng dụng mạng xã hội (cụ thể là Twitter) để xây dựng riêng

một mạng xã hội có chức năng tương tự như ứng dụng gốc.

-

Phân tích và tiến hành các giai đoạn để phát triển ứng dụng.

-

Tổng kết và đánh giá kết quả, đưa ra hướng phát triển nâng cao trong tương lai

5


Chương 2
1.

NGHIÊN CỨU TỔNG QUAN

CÁC NỀN TẢNG ỨNG DỤNG PHỔ BIẾN NHẤT HIỆN CĨ
Hiện nay trên khắp thế giới nói chung và Việt Nam nói riêng có hai loại thiết bị

thơng minh phổ biến nhất đó là điện thoại di động và máy tính (Desktop/PC). Các ứng
dụng mạng xã hội chạy dựa trên hai loại hệ điều hành phổ biến nhất của thiết bị điện
thoại thông minh là IOS và Android. Cịn trên thiết bị máy tính thì được dùng trên nền
tảng Web.
7.

CÁC PHƯƠNG PHÁP XÂY DỰNG ỨNG DỤNG

7.1


Xây dựng ứng dụng trên nền tảng di động

7.1.1 Phát triển ứng dụng Native:
Ứng dụng Native (hay còn gọi là ứng dụng gốc) là một chương trình phần mền
được phát triển để sử dụng trên một nền tảng hoặc thiết bị cụ thể. Vì một ứng dụng gốc
được xây dựng để sử dụng trên một thiết bị cụ thể và hệ điều hành của nó, nên nó có
khả năng sử dụng phần cứng và phần mềm dành riêng cho thiết bị. Các ứng dụng gốc
có thể cung cấp hiệu suất tối ưu hóa và tận dụng cơng nghệ mới nhất, chẳng hạn như
GPS, so với các ứng dụng web hoặc ứng dụng đám mây di động được phát triển chung
trên nhiều hệ thống.
Swift và Java là mã nguồn mở, và chúng là ngơn ngữ lập trình chính được
Apple và Google sử dụng. Xamarin là một công cụ phát triển phần mềm đa nền tảng
được sử dụng để phát triển ứng dụng gốc trên iOS, Android và các nền tảng khác dựa
vào C# như là một ngơn ngữ lập trình.
Thuật ngữ Native App được sử dụng để chỉ các nền tảng như Mac và PC, với
các ví dụ như ứng dụng Ảnh, Thư hoặc Danh bạ được cài đặt sẵn và định cấu hình trên
mọi máy tính. Hai nền tảng hệ điều hành di động chính là iOS của Apple và Android
của Google. Các ứng dụng native viết bằng mã được sử dụng sơ bộ cho thiết bị và
HĐH của nó. Ví dụ: các nhà phát triển viết các ứng dụng iOS bằng Objective-C hoặc
Swift, trong khi họ tạo các ứng dụng gốc Android trong Java.
Các ứng dụng gốc hoạt động với Hệ điều hành của thiết bị cho phép chúng hoạt
động nhanh hơn và linh hoạt hơn các loại ứng dụng thay thế khác. Nếu ứng dụng được
bán cho người dùng thuộc nhiều loại thiết bị khác nhau, nhà phát triển sẽ phải tạo một
phiên bản ứng dụng riêng cho từng loại.
6


Ví dụ: Ứng dụng Facebook đã từng được viết bằng HTML5 để sử dụng cùng
một mã cho iOS, Android và web di động. Tuy nhiên, ứng dụng chậm hơn đối với

người dùng iOS, dẫn đến các nhà phát triển ứng dụng của Facebook phải tạo mã riêng
cho iOS.
2.1.2 Phát triển ứng dụng đa nền tảng sử dụng React Native:
Được tạo ra bởi các nhà phát triển Facebook cho giao dịch của riêng họ nhưng
sau đó vào năm 2016; nó đã được phát hành công khai. Các ứng dụng được xây dựng
trên nền tảng này là Bloomberg, Instagram, Activity feed và trình quản lý quảng cáo
Facebook và nhiều ứng dụng khác. React cho phép chạy ứng dụng trên hai nền tảng
IOS và Android với cùng mã nguồn.
7.2

Xây dựng ứng dụng trên nền tảng Web
Ứng dụng web là một ứng dụng mà người dùng khơng cần tải xuống và thay

vào đó truy cập thơng qua trình duyệt web qua mạng. Các trình duyệt web mẫu bao
gồm Google Chrome, Safari và Mozilla Firefox.
Các nhà phát triển ứng dụng đa phần tập trung vào các tác vụ liên quan đến
trình duyệt thay vì các tác vụ liên quan đến hệ điều hành trên thiết bị đang chạy như
các ứng dụng di động.
Hiện tại có hai Framework và thư viện để xây dựng Front-end trên nền tảng
Web lớn nhất là: Vue và React. Mỗi Frameword và thư viện sẽ có từng điểm mạnh và
điểm yếu riêng. Đề tài sẽ tiến hành phân tích để đưa ra lựa chọn phù hợp cho phát triển
Front-end trên nền tảng Web.
7.3

Xây dựng Back-end cho ứng dụng

7.3.1 Back-end
Back-end là những phần bên trong bao gồm: máy chủ, ứng dụng và cơ sở dữ
liệu. Đề tài sẽ phân tích hai ngơn ngữ lập trình Back-end và đưa ra lựa chọn ngơn ngữ
nào phù hợp hơn để sử dụng lập trình Back-end. Báo cáo sẽ phân tích giữa hai ngơn

ngữ lập trình PHP và Javascript để lựa chọn làm ngôn ngữ lập trình Back-end cho đề
tài.
7.3.2 Sử dụng ngơn ngữ lập trình PHP
PHP là một từ viết tắt của cụm từ Hypertext Pre Processor. Là một ngơn ngữ
lập trình thường được sử dụng để phát triển ứng dụng. Những thứ có liên quan đến viết
7


máy chủ, mã nguồn mở hay mục đích tổng quát. Ngồi ra, nó cịn rât thích hợp để lập
trình web và có thể dễ dàng nhúng vào trang HTML. Ngày nay, PHP đã chiếm tới hơn
70% web hiện nay, trang web giới thiệu của các công ty như influxwebtechnologies,
Monamedia đều được xây dựng bằng WordPress – một mã nguồn được viết bởi ngơn
ngữ PHP. Bởi những tính năng như tối ưu hóa cho các ứng dụng web. Tốc độ load
web nhanh, nhỏ gọn, cú pháp giống C và JAVA. Rất dễ học và thời gian xây dựng sản
phẩm tương đối ngắn hơn so với các ngôn ngữ khác hiện nay.
Ngôn ngữ lập trình PHP đã được xây dựng bởi cộng đồng và trong đó có sự đóng góp
to lớn tới từ Zend Inc. Là một công ty do các nhà phát triển cốt lõi của PHP lập nên
nhằm tạo ra một mơi trường chun nghiệp. Đưa ngơn ngữ lập trình này vào quy mô
phát triển của các doanh nghiệp, môi trường chuyên nghiệp.
Cách thức thực thi:
 Kết nối tới Web Server
PHP không được thiết kế để trực tiếp handle request mà thông qua Web Server
(Thông thường là Apache hoặc Nginx). Khi client (Web Browser / HTTP Client) gửi
request lên Web Server. Web Server sẽ kết nối với PHP và tạo ra một tiến trình độc lập
để xử lý request đó. Những tiến trình đó có thể là Process (với apache) hoặc thread
(với Nginx / PHP-FPM). Tuy nhiên dù là process hay thread thì có một đặc điểm là
những tiến trình đó khơng chia sẻ tài ngun với nhau. Nghĩa là hai request của 2
client gửi lên thì tạo 2 tiến trình hồn tồn tách biệt tài ngun xử lý. Tài nguyên tách
biệt bao gồm: RAM, CPU, kết nối… Sau khi request hoàn thành, kết quả trả về cho
Web Server và client thì tiến trình đó kết thúc. Những tài ngun đã được cấp phát (Bộ

nhớ, CPU, kết nối I/O khác…) được giải phóng.

8


Hình 1 - Sơ đồ kết nối với Web Server

 Kết nối với PHP Extension:
PHP không thiết kế dưới máy ảo như JAVA, PHP chạy trên nền Zend Engine.
Zend Engine đảm nhận việc thông dịch mã PHP thành mã máy và thực thi nó. Tồn bộ
việc quản lý tài ngun của PHP được Zend Engine đảm nhận. Bản thân Zend Engine
cung cấp sẵn một số thư viện để PHP có thể chạy trực tiếp mà khơng cần thư viện
ngồi, tuy nhiên phần lớn những thư viện đó là những thư viện xử lý Text. Những thư
viện khác của PHP được viết dưới dạng extension, những thư viện này chủ làm việc
với PHP thông qua Zend Engine. Đã số những những xử lý I/O của PHP là thơng qua
thư viện ngồi chứ khơng phải hỗ trợ từ core: ví dụ kết nối DB, làm việc với HTTP, xử
lý ảnh…

Hình 2 - Cách thức kết nối với PHP Extention

9


Ảnh 1 - Cách thức kết nối với PHP Extention

2.3.3 Sử dụng ngơn ngữ lập trình Javascript
Back-end của ứng được xây dựng bằng NodeJS. NodeJS được xây dựng dựa
trên Javascript Runtime.

Hình 3 - Cấu trúc nền tảng Node Runtime


NodeJS là một nền tảng được xây dựng trên “V8 Javascript engine” được viết
bằng c++ và Javascript. Nền tảng này được phát triển bởi Ryan Lienhart Dahl vào năm
2009. Node.js ra đời khi các developer đời đầu của JavaScript mở rộng nó từ một thứ
chỉ chạy được trên trình duyệt thành một thứ có thể chạy trên máy của ta dưới dạng
ứng dụng độc lập. Giờ đây ta có thể làm được nhiều thứ với JavaScript hơn là chỉ
tương tác với các website. JavaScript giờ có khả năng làm những thứ và những ngơn
ngữ lập trình scripting như Python có thể làm. Node.js là một JavaScript runtime được
build dựa trên engine JavaScript V8 của Chrome. Node.js sử dụng kiến trúc hướng sự
kiện event-driven, mơ hình non-blocking I/O làm cho nó nhẹ và hiệu quả hơn. Hệ
thống nén của Node.js, npm, là hệ thống thư viện nguồn mở lớn nhất thế giới.
I/O là Input/Output. Nó có thể là bất cứ thứ gì từ đọc/viết các file nội bộ cho đến
tạo HTTP đến API. I/O tốn thời gian và do đó nó sẽ chặn các chức năng khác.
Xét một tình huống là chúng ta cần dữ liệu backend chi tiết cho user1 và user2 và
sau đó hiển thị chúng trên màn hình hoặc bảng điều khiển. Để phản hồi cho lệnh này
sẽ mất thời gian, nhưng cả 2 dữ liệu user có thể thực hiện độc lập và cùng lúc.

10


Hình 4 - So sánh giữa Blocking I/O (trái) và Non-Blocking I/O (phải)

 Blocking I/O
Trong phương thức blocking, dữ liệu của user2 sẽ không bắt đầu cho đến khi dữ liệu
của user1 xuất trên màn hình. Nếu đây là một server web, chúng ta phải bắt đầu một
thread mới cho từng user mới. Nhưng JavaScript là đơn luồng (tính chất “xong cái này
mới đến cái khác”). Và điều này làm JavaScript khơng phù hợp cho các tác vụ đa
luồng.
Đó là lý do non-blocking xuất hiện.
 Non-blocking I/O

Mặt khác, sử dụng request non-blocking, ta có thể request dữ liệu cho user2 mà khơng
phải đợi phản hồi request từ user1. Ta có thể bắt đầu cả 2 request song song. Nonblocking I/O loại bỏ nhu cầu đa luồng vì server có thể xử lý nhiều request cùng một
lúc.
 Require
Require làm 3 thứ:
o Tải module đi kèm với Node.js như hệ thống file và HTTP từ Node.js
API.
o Tải thư viện thứ 3 như Express và Mongoose mà ta cài đặt từ npm.
o Giúp ta require file của và mo-đun hoá project.
o Require là 1 chức năng, và nó nhận tham số path tinh chỉnh và trả về
module.export.
 Node Modules
Module Node là 1 block code có thể tái sử dụng mà sự tồn tại của nó khơng vơ tình
ảnh hưởng đến các code khác. Ta có thể tạo module của riêng mình và sử dụng nó với
11


nhiều ứng dụng khác nhau. Node.js có 1 bộ built-in module ta có thể sử dụng mà
khơng cần cài đặt thêm gì nữa.
 Lập trình hướng sự kiện và khơng đồng bộ:
Tồn bộ API trong thư viện NodeJS đều khơng đồng bộ, hay không bị chặn. Về cơ bản
điều này có nghĩa là một server sử dụng NodeJS sẽ khơng bao giờ chờ một API trả về
dữ liệu. Server sẽ chuyển sang API kế tiếp sau khi gọi API đó và cơ chế thông báo của
Events trong NodeJS giúp server nhận được phản hồi từ lần gọi API trước.
 Cực kỳ nhanh chóng:
Được xây dựng trên Cơng cụ JavaScript V8 của Google Chrome, thư viện NodeJS có
khả năng xử lý mã vơ cùng nhanh.
 Đơn luồng/Single thread nhưng có khả năng mở rộng cao:
NodeJS sử dụng một mơ hình luồng đơn với vòng lặp sự kiện/event. Cơ chế event cho
phép máy chủ phản hồi non-blocking và cũng cho phép khả năng mở rộng cao hơn so

với các server truyền thống hỗ trợ giới hạn các thread để xử lý yêu cầu. NodeJS sử
dụng một chương trình đơn luồng, cùng một chương trình có thể cung cấp dịch vụ cho
một số lượng yêu cầu lớn hơn so với các máy chủ truyền thống như Apache HTTP
Server.
Các ứng dụng của NodeJS:
 Hệ thống Notification - Giống như facebook hayTwitter
 Websocket server - Các máy chủ web socket như là Online Chat, Game
Server…
 Fast File Upload Client - Các chương trình upload file tốc độ cao.
 Ad Server - Các máy chủ quảng cáo.
 Cloud Services - Các dịch vụ đám mây.
 RESTful API - Những ứng dụng mà được sử dụng cho các ứng dụng khác
thông qua API.
 Any Real-time Data Application - Bất kỳ một ứng dụng nào có yêu cầu về tốc
độ thời gian thực.
 Ứng dụng Single Page Application (SPA) - Những ứng dụng này thường
request rất nhiều đến server thông qua AJAX
12


 Ứng dụng truy vấn tới NoSQL database - Như MongoDB, CouchDB,…
8.

PHÂN TÍCH ƯU VÀ NHƯỢC ĐIỂM CỦA CÁC PHƯƠNG PHÁP
XÂY DỰNG ỨNG DỤNG

8.1

Phương pháp xây dựng ứng dụng trên nền tảng di động


1.1.1 Phát triển ứng dụng Native:
Ưu điểm:


Có nhiều chức năng do sử dụng các khả năng của thiết bị cơ bản.



Hiệu suất tốt hơn so với ứng dụng React Native.



Giao diện người dùng phù hợp hơn với trải nghiệm người dùng của Hệ điều
hành



Đảm bảo chất lượng trong các cửa hàng ứng dụng.



Bảo mật cao.

Nhược điểm:


Nhiều cơ sở mã vì mỗi thiết bị có phiên bản ứng dụng riêng.




Chi phí có thể cao hơn khi phải xây dựng và quản lý cơ sở mã cho mỗi nền
tảng khác nhau.



Dành thời gian cho nhiều bản dựng cho các nền tảng riêng biệt trong mỗi
bản cập nhật tính năng.

1.1.2 Phát triển ứng dụng đa nền tảng sử dụng React Native:
Ưu điểm:


Hot reloading và Live reload: với 2 tính năng này thì các nhà lập trình có
thể quan sát được những sự thay đổi của các dòng lệnh một cách trực quan
nhất.



Tiết kiệm nhân lực và thời gian: với các ứng dụng được build bằng react
native thì sẽ mất ít thời gian hơn các ứng dụng được viết bằng các code
thuần native.



Viết 1 được nhiều: Người lập trifnnh sẽ viết 1 lần duy nhất mà sẽ chạy
được trên cả 2 nền tảng.

13





Mã nguồn có nhiều tương quan với framewordk ReactJS để xây dựng ứng
dụng trên nền tảng Web. Người lập trình có thể tiết kiệm thời gian tìm hiểu
ReactJS khi đã có kiến thức React Native.

Nhược điểm:


Khơng thể build được các ứng dụng phức tạp như các app thuần native
code.



Vẫn còn thiếu các component view và các module của Android như:
camera roll, map, media,….

1.2



Hiệu năng chưa thể sánh bằng các app thuần native code.



Vẫn có lỗ hỏng bảo mật do dựa trên nền tảng Javascript.

Phương pháp xây dựng ứng dụng nền tảng Web
Phân tích hai Framework/Thư viện phổ biến nhất để xây dựng Front-end / giao


diện người dùng
1.2.1 VueJS
Được đánh giá là framework hàng đầu trong xây dựng, phát triển giao diện
người dùng (UI). Ngồi ra, lập trình viên cũng có thể tạo các trang SPA - Single - Page
Applications có độ phức tạo cao nếu kết hợp VueJS với SFC và thư viện hỗ trợ. Các
ứng dụng được phát triển bởi VueJS cũng có tốc độ tải trang, xử lý rất nhanh. Đây
cũng là nguyên nhân khiến nó được ưu ái trong các dự án gần đây.
Ưu điểm:
 Kích thước nhỏ gọn
Tỷ lệ thành công của JavaScript framework sẽ phụ thuộc vào kích thước của nó.
Kích thước càng nhỏ thì cơng năng sử dụng càng nhiều. Kích thước của vue.js
framework là 18–21KB, người dùng sẽ không mất thời gian để tải xuống và sử dụng.
Tuy nhiên, điều này khơng có nghĩa là tốc độ chạy của vue.js thấp do kích thước nhỏ.
Thay vào đó, vue.js đánh bại Framework cồng kềnh như React.js.
 Dễ dàng để tìm hiểu và phát triển ứng dụng
Một trong những lý do framework này phổ biến là nó tương đối dễ hiểu. Nhờ
cấu trúc đơn giản của vue.js, người dùng có thể dễ dàng thêm phần mềm vào dự án
website đang thực hiện của ta. Cả hai mơ hình quy mơ nhỏ cũng như quy mơ lớn đều
14


có thể được phát triển thơng qua framework này, do đó tiết kiệm rất nhiều thời gian.
Trong trường hợp xảy ra bất kỳ vấn đề nào, người dùng cũng có thể dễ dàng tìm ra các
khu vực lỗi. Tất cả là nhờ cấu trúc đơn giản của vue.js.
 Tích hợp đơn giản
Vue.js cũng là phần mềm được các web developer sử dụng khá phổ biến nhờ dễ
dàng trong quá trình tích hợp với các ứng dụng hiện có. Sự tiện lợi này xuất phát từ
vue.js được xây dựng dựa trên JavaScript framework và do đó, có thể tích hợp được
vào các ứng dụng khác xây dựng trên JavaScript tương đối đơn giản. Như vậy, vue.js
sẽ rất hữu ích cho các công việc như phát triển các ứng dụng web mới và thay đổi các

ứng dụng đã có từ trước đó. Có được khả năng tích hợp này là nhờ Vue.js có tất cả các
yếu tố sẵn sàng.
 Tính linh hoạt
Tính linh hoạt cao cũng được đánh giá là một lợi thế của Vue.js. Vue.js cho phép
người dùng viết mẫu trong các tệp HTML, JavaScript sử dụng các node ảo. Tính linh
hoạt của Vue.js cũng giúp các developer phát triển React.js, Angular.js và bất kỳ
JavaScript framework mới nào cảm thấy dễ hiểu hơn. Vue.js đã cho thấy rất nhiều lợi
ích trong việc phát triển các ứng dụng đơn giản có thể chạy trực tiếp từ trình duyệt.
Nhược điểm:
 Vuejs có nhược điểm về SEO. Vuejs có hỗ trợ Server Side Rendering, tuy nhiên để
Render được HTML từ Vuejs phía Server thì ta phải cần tuân thủ sự dụng thuần
VueJS và các Component của bên thứ 3 nhúng vào cũng phải tuân thử Server Side
Rendering. Không phải đơn vị nào cũng hỗ trợ điều này ở thời điểm hiện tại. Ví
thế, việc SEO trở nên khó khăn hơn.
 Mặc dù Google đã có thể tự xử lý Render cho các Javascript Framework như
VueJS nhưng với điều kiện là người lập trình phải xây dựng API đủ nhanh để
Goole có thể quét được.
1.2.2 React
React (còn được gọi là React.js) là một Thư viện Javascript được tạo ra bởi sự
cộng tác giữa Facebook và Instagram. Nó cho phép những nhà phát triển web tạo ra
giao diện người dung nhanh chóng. Phần Views của Reactjs thường được hiển thị bằng
việc chủ yếu dung các component mà chứa các component cụ thể hoặc các thẻ HTML.
15


Một trong những đặc trưng duy nhất của Reactjs là việc render dữ liệu khơng những
có thể thực hiện ở tầng server mà cịn ở tầng client.
Nó cũng sử dụng khái niệm là Virtual DOM (DOM ảo). Virtual DOM tạo ra
bản cache cấu trúc dữ liệu của ứng dụng trên bộ nhớ. Sau đó, ở mỗi vịng lặp, nó liệt
kê những thay đổi và sau đó là cập nhật lại sự thay đổi trên DOM của trình duyệt một

cách hiệu quả. Điều này cho phép ta viết các đoạn code như thể toàn bộ trang được
render lại dù thực tế là Reactjs chỉ render những component hay subcomponent nào
thực sự thay đổi.
Ưu điểm:


Reactjs tạo ra cho chính nó DOM ảo – nơi mà các component thực sự

tồn tại trên đó. Điều này sẽ giúp cải thiện hiệu suất rất nhiều. Reactjs cũng tính tốn
những thay đổi nào cần cập nhật len DOM và chỉ thực hiện chúng. Điều này giúp
Reactjs tránh những thao tác cần trên DOM mà nhiều tài nguyên.


Reactjs giúp việc viết các đoạn code JS dễ dàng hơn: Nó dung cú pháp

đặc biệt là JSX (Javascript mở rộng) cho phép ta trộn giữa code HTML và Javascript.
Ta có thể them vào các đoạn HTML vào trong hàm render mà khơng cần phải nối
chuỗi. Đây là đặc tính thú vị của Reactjs. Nó sẽ chuyển đổi các đoạn HTML thành các
hàm khởi tạo đối tượng HTML bằng bộ biến đổi JSX.


Render tầng server: Một trong những vấn đề với các ứng dụng đơn trang

là tối ưu SEO và thời gian tải trang. Nếu tất cả việc xây dựng và hiển thị trang đều
thực hiện ở client, thì người dung sẽ phải chờ cho trang được khởi tạo và hiển thị lên.
Điều này thực tế là chậm. Hoặc nếu giả sử người dung vơ hiệu hóa Javascript thì sao?
Reactjs là một thư viện component, nó có thể vừa render ở ngồi trình duyệt sử dụng
DOM và cũng có thể render bằng các chuỗi HTML mà server trả về.
Nhược điểm:



Reactjs chỉ phục vụ cho tầng View. React chỉ là View Library nó khơng

phải là một MVC framework như những framework khác. Đây chỉ là thư viện của
Facebook giúp render ra phần view. Vì thế React sẽ khơng có phần Model và
Controller, mà phải kết hợp với các thư viện khác. React cũng sẽ khơng có 2-way
binding hay là Ajax.

16




Tích hợp Reactjs vào các framework MVC truyền thống yêu cầu cần

phải cấu hình lại.


React khá nặng nếu so với các framework khác React có kích thước

tương tương với Angular (Khoảng 35kb so với 39kb của Angular). Trong khi đó
Angular là một framework hồn chỉnh.

1.3

Khó tiếp cận cho người mới học Web.

Xây dựng Back-end

1.3.1 Sử dụng ngơn ngữ lập trình PHP

Ưu điểm:


Đơn giản, linh động:

Từ thiết kế của PHP, cộng với việc PHP là ngôn ngữ Script và cú pháp khá
thoải mái nên nó rất linh động. Cú pháp PHP dễ học.


Được hỗ trợ bởi cộng đồng lớn:

PHP sở hữu một trong những cộng đồng developer lớn nhất. Chính vì có cộng
đồng rất lớn như vậy nên hầu như vấn đề kỹ thuật nào cũng có sự hỗ trợ.


Có rất nhiều Framework, thư viện:

Cùng với việc sở hữu cộng đồng lớn, PHP cũng sỡ hữu vô số bộ thư viện,
extension, rất nhiều Framework. Do vậy PHP có thể giải quyết rất nhiều bài tốn khác
nhau. Hầu như nói đến vấn đề gì cũng có thể có những thư viện liên quan để PHP.
Nhược điểm:


Không chia sẻ tài nguyên

Vấn đề đầu tiên và cũng là vấn đề hạn chế lớn nhất của PHP chính là việc
khơng chia sẻ tài ngun giữa các tiến trình. Việc đóng khung các tiến trình giúp ích
rất lớn cho việc PHP không phải đối mặt với những vấn đề như: quản lý bộ nhớ (chả
mấy khi PHP Developer quan tâm đến vấn đề này), crash hệ thống (một hai tiến trình
chết thì chả ảnh hưởng gì đến hệ thống). Tuy nhiên việc này lại dẫn đến rất nhiều hạn

chế khác.
Đầu tiên là việc không chia sẻ tài nguyên khiến cho tài nguyên sử dụng (RAM,
CPU, I/O connection) tăng lên rất nhanh. Tưởng tượng cùng lúc có 100 request được
xử lý, tương đương 100 tiến trình được chạy. Nếu một biến cùng được sử dụng thì số
17


lượng RAM sử dụng sẽ là 100 lần (các ngôn ngữ khác vì sử dụng chung RAM nên
những phần việc memory cache rất đơn giản), số lượng kết nối DB phải là 100 kết nối
cùng lúc. Điều này hoàn toàn khác xa so với những ngôn ngữ như JAVA, .NET, Node
JS… Do vậy khi sử dụng PHP cho hệ thống lớn thì cực khó để scale hệ thống, ngưỡng
của PHP.


Q linh động

Đây được nêu ra như một điểm mạnh của PHP, nhưng cũng là điểm chết người
của nó. PHP quá dễ dễ, quá linh động, điều này khiến cho Developer có vơ số cách để
đạt được kết quả. Cùng với việc nó quá dễ để học khiến cho chất lượng của PHP
developer thấp hơn khá nhiều so với đa số các ngơn ngữ lập trình khác. Chun mơn
kém lại gặp ngôn ngữ quá linh động, kết quả thường thấy là chất lượng code rất tệ, quá
nhiều Technical Debt được tạo ra. Điều này khiến cho việc maintain một dự án PHP
trở lên quá kinh khủng (Đấy là còn chưa kể đến tính tương thích ngược của những
framework và một vài yếu tố bên ngồi nữa). PHP cũng có q nhiều thư viện bên
ngồi, đơi khi chất lượng cũng rất tệ khiến cho tình trạng càng trở lên tồi tệ.


Phụ thuộc quá nhiều vào extension:

Những xử lý hỗ trợ từ Core của PHP rất hạn chế do vậy PHP phải phụ thuộc

nhiều vào các thư viện Extension ngoài. Những Extension ngoài không tương tác trực
tiếp mà làm việc với PHP thông qua Zend Engine. Cơ chế này cũng khiến cho mọi thứ
trở lên chậm hơn. Do vậy nhiều khi Extension không giúp cải thiện q nhiều. Ta lấy
ví dụ điển hình rất hay xảy ra là kết nối Database. Trong khi các ngơn ngữ lập trình
khác thường sử dụng Connection Pool để quản lý kết nối với DB. PHP sử dụng cơ chế
khác là persistent Connection để tăng tốc kết nối. Persistent Connection giúp cho việc
khi một request được hoàn thành thì kết nối DB tạo ra bởi Request đó khơng được
“đóng” mà lại được tiếp tục sử dụng ở request tiếp theo. Điều này giúp giảm thời gian
kết nối với DB. Tuy nhiên khi Request chưa dừng thì kết nối này không được share với
một request khác (cho dù ở thời điểm hiện tại, request đó khơng thao tác DB đi nữa).
Điều này dẫn đến nếu PHP phải xử lý 100 request đồng thời thì cần có 100 kết nối đến
Database (nếu tăng lên 1000 thì số đó là 1000). Điều này hoàn toàn khác với cơ chế
connection pool của các ngôn ngữ như JAVA. Connection Pool đảm bảo chỉ có tối đa x
Connection đến DB được tạo ra (x do Developer set được). Kể cả có 100 request, hay
18


×