Tải bản đầy đủ (.docx) (53 trang)

Đồ án xây dựng ứng dụng đánh giá đồ ăn (social)

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.2 MB, 53 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM

ĐỒ ÁN MÔN HỌC

ĐỒ ÁN 2

XÂY DỰNG ỨNG DỤNG ĐÁNH GIÁ ĐỒ ĂN
(SOCIAL )
Giảng viên hướng dẫn :

Thái Thụy Hàn Uyển

Sinh viên thực hiện : Trần Quốc Duy
Nguyễn Quang Vũ

20521250
20520352


LỜI CẢM ƠN

Đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến cô Thái Thụy Hàn
Uyển – giảng viên bộ môn Đồ án 2. Cô đã trực tiếp giảng dạy, tận tình chia sẻ
những kiến thức, hỗ trợ và đóng góp những ý kiến quý báu để giúp chúng em hoàn
thành thật tốt đồ án và báo cáo của mình.
Trong thời đại cơng nghệ phát triển mạnh mẽ vượt bậc ngày nay, việc nâng
cao trong công tác quản lý, chăm sóc sức khỏe và hỗ trợ khách hàng ở các ngành
dịch vụ là rất cần thiết và quan trọng. Cụ thể là về vấn đề ăn uống, giúp cho mọi


người có thể có cái nhìn tổng qt hơn về một loại món ăn, đưa ra lời khuyên lời
góp ý để người bán có thể khắc phục và phát triển hơn. Để đáp ứng nhu cầu của
đó của mọi người, chúng em đã lựa chọn đề tài xây dựng ứng dụng đánh giá đồ ăn,
để người mua và người bán có thể tiếp cận nhau dễ dàng hơn, trao đổi khắc phục
và tiếp tục phát triển.
Tuy nhiên, trong quá trình thực hiện đồ án vẫn cịn những sai sót khó tránh
khỏi nên nhóm chúng em rất mong nhận được sự thơng cảm và góp ý chân thành
từ Cơ nhằm trau dồi, khắc phục và ngày càng hoàn thiện tốt hơn đồ án mà chúng
em đang xây dựng. Đồng thời chúng em hy vọng sẽ có thêm nhiều kinh nghiệm
quý giá để thực hiện các đề tài khác trong tương lai.

Nhóm sinh viên thực hiện:

Trần Quốc Duy

Nguyễn Quang Vũ

2


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

Tp.HCM, ngày … tháng 3 năm 2023
3


GVHD

Thái Thụy Hàn Uyển


MỤC LỤC

4


Chương 1: ng 1:

GIỚI THIỆU ĐỀ TÀII THIỆU ĐỀ TÀIU ĐỀ TÀI TÀI
1.1.

Tên đề tài: tài:
XÂY DỰNG ỨNG DỤNG ĐÁNH GIÁ ĐỒ ĂN

1.2.

Mô tả đề tài: đề tài: tài:
-

Để việc quản lý kinh doanh trở nên thuận tiện và dễ dàng hơn cũng như đa
dạng món ăn, giúp cho mọi người có thể dễ dàng trao đổi chúng, em đã tiến
hành phân tích và triển khai thực hiện một dự án đó là “Phần mềm đánh giá
đồ ăn”.

-

Một ứng dụng đánh giá đồ ăn với đầy đủ các chức năng cơ bản, giao diện
bắt mắt, dễ thao tác, thân thiện với người dùng thích hợp với mọi độ tuổi.

-


Việc xây dựng ứng dụng đánh giá đồ ăn sẽ giúp cho việc các cửa hàng có thể
rút ra được kinh nghiệm từ khách hàng, đảm bảo được độ uy tín của món
ăn. Khách hàng đã trải nghiệm có thể đánh giá để cho những khách hàng
sau biết được.

-

Mục tiêu của dự án là tạo ra một cộng đồng đánh giá đồ ăn đáng tin cậy, nơi
người dùng có thể tương tác, chia sẻ và đánh giá về các món ăn khác nhau.
Sự tương tác và chất lượng bài viết đánh giá sẽ được đánh giá bằng cách tính
điểm. Điểm này sau đó có thể được đổi thành token trên hệ thống thơng qua
việc sử dụng chuẩn ERC20.

-

Các token này có thể được lưu trữ trong ví điện tử của người dùng, nơi mà
họ có thể theo dõi số lượng token hiện có và quản lý giao dịch của mình. Với
số lượng token tích lũy, người dùng có thể sử dụng chúng để đổi lấy những
ưu đãi, khuyến mại có giá trị từ các đối tác tham gia vào dự án. Điều này tạo
ra một hệ thống kinh tế trong đó token khơng chỉ là một phương tiện trao đổi
mà cịn có giá trị sử dụng rõ ràng trong lĩnh vực đánh giá đồ ăn.

1.3.

Lý do chọn đề tài:n đề tài: tài:
-

Nhu cầu ăn uống của người dân ngày càng tăng cao.
5



-

Việc lắng nghe ý kiến từ khách hàng có thể giúp các nhà hàng phát triển
hơn. Bên cạnh đó khách hàng có thể biết trước được thơng tin, trải nghiệm
của những món ăn mà mình có ý định thưởng thức.

1.4.

Các chức năng chính của đề tài:c năng chính của đề tài:a đề tài: tài:
-

Đăng nhập, đăng ký và đăng xuất

-

Quản lý người dùng

-

Quản lý địa điểm cửa hàng

-

Quản lý bài đăng

-

Quản lý bài đăng theo loại


-

Đánh giá món ăn thơng qua bài đăng

-

Like, bình luận, chia sẻ bài đăng

-

Follow người dùng

-

Kiểm tra lượt xem, lượt đánh giá, lượt yêu thích

-

Ủng hộ token cho những bài viết mà mình thấy thích

-

Khuyến khích những bài viết được u thích nhiều có thể sử dụng lượt xem
quy đổi sang Token

1.5.

Phân quyền admin và user
Công nghệ sử dụng: sử dụng: dụng:ng:


-

Công nghệ Nextjs

-

Công nghệ Nodejs(Express)

-

Dịch vụ Amazon S3

-

Ngơn ngữ TypeScript

-

Database PSQL

-

Solidity

-

Hardhat

1.6.


Mơi trường lập trình:ng lập trình:p trình:

-

Visual Studio Code.

6


1.7.

Cơng cụng: hỗ trợ (nếu có): trợ (nếu có): (nếu có):u có):

-

Github: quản lý source code

-

Google Drive: quản lý file

-

Trello: theo dõi quản lý tiến độ của đồ án

-

Draw.io: Vẽ sơ đồ đặc tả

-


Figma: thiết kế giao diện ban đầu cho ứng dụng

7


Chương 1: ng 2:

GIỚI THIỆU ĐỀ TÀII THIỆU ĐỀ TÀIU CƠNG NGHỆU ĐỀ TÀI
2.1.

Cơng nghệ sử dụng: NextJS(Front-end)

-

Next JS là gì? Next.js là một framework front-end React được phát triển
dưới dạng open-source bổ sung các khả năng tối ưu hóa như render phía
máy chủ (SSR) và tạo trang web static. Next.js xây dựng dựa trên thư viện
React, có nghĩa là các ứng dụng Next.js sử dụng core của React và chỉ thêm
các tính năng bổ sung. Việc triển khai ứng dụng SSR cho phép máy chủ truy
cập tất cả dữ liệu được yêu cầu và xử lý JavaScript cùng nhau để hiển thị
trang. Sau đó, trang được gửi lại tồn bộ cho trình duyệt và ngay lập tức
được hiển thị. SSR cho phép các trang web load trong thời gian nhỏ nhất và
tăng trải nghiệm người dùng với khả năng phản hồi nhanh hơn. Ngoài ra, sử
dụng SSR cũng mang lại cho bạn lợi thế về SEO, giúp trang web của bạn
hiển thị cao hơn trên các trang kết quả của cơng cụ tìm kiếm. SSR làm cho
các trang web xếp hạng tốt hơn cho SEO vì chúng tải nhanh hơn và nhiều
nội dung trang web có thể được quét bởi các SEO trackers. Thẻ <head>
trong Next.js cũng cho phép bạn chỉnh sửa thẻ <head> của một trang web,
điều mà bạn không thể thực hiện trong React. Thẻ <head> là một phần cốt

lõi trong metadata của trang web và góp phần vào xếp hạng SEO của trang
web.

-

Tại sao lại sử dụng NextJS: Ưu điểm chính của Next.js là hỗ trợ SSR tích
hợp để tăng hiệu suất và SEO. Với tất cả thơng tin trên server, nó sẽ xử lý
để generate ra thơng tin HTML của trang/ Sau đó Client có thể gửi một yêu
cầu đến Server và nhận toàn bộ trang HTML thay vì yêu cầu từng thành
phần riêng lẻ với Client Render.

8


-

Uu điểm:



Ứng dụng Next.js tải nhanh hơn đáng kể so với ứng dụng React do được
render phía Server.



Hỗ trợ các tính năng cho static web.



Đối với những ai đã có kinh nghiệm làm việc với React thì việc tiếp tập

NextJS sẽ là một việc dễ dàng.



Tự động code splitting cho các page nhằm tối ưu hoá performance khi load
trang.



Dễ dàng xây dựng các API internal thông qua các API routes tích hợp sẵn và
tạo các endpoit API.



Hỗ trợ tích hợp cho route cho page, CSS, JSX và TypeScript.
9




-

Nhanh chóng thêm các plugin để tùy chỉnh Next.js theo nhu cầu của trang
cụ thể của bạn.
Nhược điểm: Nhược điểm thực sự duy nhất của Next.js là nó là một
framework được cố định, có nghĩa là nó có một phương pháp và bộ cơng cụ
cụ thể mà nó muốn bạn sử dụng để xây dựng các ứng dụng của mình. Tuy
nhiên, các tùy chọn của Next.js sẽ phù hợp với phạm vi của hầu hết các dự
án.


2.2.

Công nghệ sử dụng: Nodejs(Back-end):
❖ Khái niệm Nodejs:
● Node.js là một platform (nền tảng) độc lập được xây dựng trên môi
trường Javascript Runtime - trình thơng dịch ngơn ngữ Javascript cực
nhanh trên trình duyệt Chrome. Dựa trên Node.js, chúng ta có thể xây
dựng các ứng dụng mạng một cách nhanh chóng và dễ dàng mở rộng.
● Node.js được thiết kế bởi Ryan Lienhart Dahl - một kỹ sư phần mềm
người Mỹ vào năm 2009 và phát triển dưới sự bảo trợ của Joyent.
● Phần Core bên dưới của Nodejs được viết hầu hết bằng C++ nên cho
tốc độ xử lý và hiệu năng khá cao.
● Các ứng dụng được tạo ra bởi Node.js có tốc độ xử lý nhanh, realtime
thời gian thực.
● Node.js sẽ thích hợp cho các sản phẩm có lưu lượng truy cập lớn, cần
sự thay đổi về công nghệ và cần được mở rộng hoặc tạo ra các dự án
Startup một cách nhanh nhất có thể.

10


❖ Lý do để sử dụng Node.js
● Các ứng dụng Nodejs được viết bằng javascript, ngôn ngữ này là một
ngôn ngữ khá thông dụng. Theo tác giả của ngôn ngữ Javascript, Ryan
Dahl: “Javascript có những đặc tính mà làm cho nó rất khác biệt so
với các ngơn ngữ lập trình động cịn lại, cụ thể là nó khơng có khái
niệm về đa luồng, tất cả là đơn luồng và hướng sự kiện.”
● Nodejs chạy đa nền tảng phía Server, sử dụng kiến trúc hướng sự kiện
Event-driven, cơ chế non-blocking I/O làm cho nó nhẹ và hiệu quả.
● Có thể chạy ứng dụng Nodejs ở bất kỳ đâu trên máy Mac – Window –

Linux, hơn nữa cộng đồng Nodejs rất lớn và hồn tồn miễn phí. Các
bạn có thể thấy cộng đồng Nodejs lớn như thế nào tại đây, các
package đều hoàn toàn free.
● Các ứng dụng NodeJS đáp ứng tốt thời gian thực và chạy đa nền tảng,
đa thiết bị.
❖ Express là gì: ExpressJS là một trong những framework phổ biến dùng để
xây dựng API và Website phổ biến nhất của NodeJS. Nó được sử dụng rộng
rãi đến mức hầu như mọi dự án Web nào đều bắt đầu bằng việc tích hợp
Express. Có rất nhiều lý do để chọn ExpressJS:
● Có nhiều tính năng hỗ trợ tất cả những gì bạn cần trong việc xây dựng
Web và API
● Quản lý các route dễ dàng
● Cung cấp một nền tảng phát triển cho các API
● Hỗ trợ nhiều thư viện và plugin
● Bảo mật và an toàn hơn so với việc code thuần
● Hỗ trợ cộng đồng tuyệt vời
2.3.

Ngôn ngữ lập trình TypeScript: lập trình:p trình TypeScript:
❖ TypeScript là gì?
● Tên như ý nghĩa, TypeScript là một ngôn ngữ kịch bản (script) mã
nguồn mở do Microsoft phát triển, kế thừa từ nền tảng
của JavaScript và bổ sung khả năng làm việc với các kiểu dữ liệu
tĩnh (static type).

11


● TypeScript có thể sử dụng để phát triển các ứng dụng chạy ở cả
client-side (Angular2) và server-side (NodeJS). TypeScript sử dụng

tất cả các tính năng của của ECMAScript 2015 (ES6) như classes,
modules. Trước khi TypeScript ra đời, cũng có một số thư viện như
CoffeeScript và Dart được phát triển bởi Google hỗ trợ những concept
trên nhưng chúng lại sử dụng cú pháp mới hồn tồn. Do đó, tuy ra
đời sau nhưng TypeScript vẫn đang nhận được sự phản hồi tích cực từ
các lập trình viên.

❖ Vì sao nên sử dụng TypeScript
● Dễ phát triển dự án lớn
Trong một thời gian dài, các lập trình viên đã ln gặp khó khăn khi
muốn làm việc với hướng đối tượng hay thậm chí là khái niệm căn
bản về kiểu dữ liệu trong JavaScript. Rất nhiều lỗi compile time
không thể phát hiện tự động như gán dữ liệu sai kiểu hay việc tạo
class khó khăn khiến lập trình viên khơng muốn sử dụng JavaScript
quá nhiều.
TypeScirpt ra đời và khắc phục những nhược điểm trên bằng cách áp
dụng các kỹ thuật mới nhất của ES6 cũng như khả năng làm việc với
kiểu dữ liệu tĩnh. Giờ đây các biến được kiểm soát kiểu dữ liệu chặt
12


chẽ, lỗi kiểu cũng có thể được code editor chỉ ra ngay trong quá trình
viết mã giúp việc phát triển các dự án lớn dễ dàng hơn.
❖ Chức năng của TypeScript
● Static Typing: Một trong những tính năng đáng giá nhất của
TypeScript là kiểu dữ liệu tĩnh - static type. Dĩ nhiên nếu đã quen với
cú pháp JavaScript thông thường thì bạn có thể bỏ qua bước khai báo
kiểu này và để compiler tự xác định, nhưng có thể chắc chắn rằng
phần lớn lập trình viên đã mong chờ khả năng khai báo kiểu này khi
làm việc lần đầu với JavaScript, nhất là khi đã từng sử dụng các ngôn

ngữ lập trình như C/Java,… Khả năng khai báo kiểu giúp kiểm soát
các biến tốt hơn và đồng thời phát hiện sớm, giảm thiểu lỗi trong quá
trình biên dịch/runtime.
● Interfaces: Interface hay giao diện là một khái niệm quen thuộc trong
hướng đối tượng, nó quy định cấu trúc bắt buộc (thuộc tính, phương
thức, sự kiện) mà mọi thực thể (object) triển khai (implement)
interface đó phải tuân thủ chặt chẽ. Interfaces trong TypeScript cũng
dựa trên tinh thần đó, sử dụng static types để khai báo các thành phần
và ràng buộc kiểu, nhưng chỉ dừng lại ở khai báo mà không
implement.
● Modules: Khả năng phân rã thành modules là rất quan trọng trong các
dự án cần tái sử dụng mã nguồn và khả năng mở rộng về sau. Module
hóa cũng giúp tổ chức mã nguồn khoa học hơn và dễ đọc, dễ bảo trì.
TypeScript cho phép export các class, interfaces, functions,… thành
một module để sử dụng ở nơi khác và import các module có sẵn để
tận dụng code. Có 2 kiểu module chính là Internal Module (sử dụng
trong cùng file js) và External Module (sử dụng module từ nhiều file
JS khác nhau). Do JS truyền thống quản lý file dựa trên cặp thẻ , trình
duyệt nạp từng file (và các module trong đó) một cách tuyến tính,
khiến khơng có cách nào chạy bất đồng bộ các module này.
TypeScript xử lý vấn đề bằng cách sử dụng các thư viện RequireJS
cho client side và Nodejs cho server side để liên kết các file JS và sử
dụng bất đồng bộ các module.
● Generics: Generics là một kỹ thuật lập trình tiên tiến, khi người ta
tách kiểu dữ liệu ra khỏi logic xử lý và cấu trúc dữ liệu. Với Generics
code chỉ cần viết một lần và kiểu dữ liệu có thể được quy định ở
compile time, giúp nâng cao khả năng tái sử dụng. Generics trong
TypeScript gần tương tự C#, không chỉ dùng cho hàm mà còn cả
Classes và Interfaces.
❖ Ưu điểm:

13


● Thuận tiện và hồn tồn miễn phí Đối với ngơn ngữ lập trình tĩnh
như TypeScript, ta có thể lấy tất cả số liệu và thông số của người dùng
dễ dàng hơn nhờ có IDE và trình biên dịch. TypeScript có khả năng
hỗ trợ tìm kiếm, giúp rút ngắn thời gian kiểm tra lại code, không cần
thông qua người dùng khác để tìm thơng tin dữ liệu. Đồng thời giảm
thiểu phần trăm va chạm lỗi trong quá trình vận hành. Đây là một
trong những phần mềm nổi trội được Microsoft hỗ trợ hồn tồn miễn
phí.
● Thao tác nhanh chóng, đơn giản Khi sử dụng ngôn ngữ thông
thường, người dùng sẽ phải khởi động lại hàm, tạo đối số và hoàn
thành đoạn mã. Sau khi áp dụng các đoạn mã và cơng cụ cần thiết, thì
bắt đầu vận hành. Trong q trình vận hành, nếu phát hiện có lỗi thì
tiến hành sửa chữa lại. Trong khi đó TypeScript có thao tác khá đơn
giản, dễ đọc, giúp tiết kiệm thời gian, khắc phục tình trạng gặp lỗi.
● Tái cấu trúc Trong quá trình viết code, lập trình viên sẽ thường xuyên
mắc phải các lỗi nhỏ và cần chỉnh sửa. Việc sử dụng TypeScript sẽ
giúp cho thao tác chỉnh sửa code trở nên dễ dàng hơn, nhờ có lệnh
Rename Symbol/Find All Occurrences. Ngược lại đối với các ngôn
ngữ khác, khi cần sửa đoạn code nào đó thì sẽ phải thay đổi cả những
tập tin liên quan khác hoặc sử dụng RegEx.Trong trường hợp người
dùng TypeScript muốn nâng cấp hệ thống (thêm/xóa thuộc tính, đổi
tên,…), TypeScript giúp thiết lập lại cấu trúc sao cho phù hợp với nhu
cầu tìm kiếm, mà khơng làm xáo trộn hệ thống. Trong trường hợp
code của người dùng không tương thích với bất cứ dữ liệu nào thì sẽ
hệ thống sẽ thông báo lại ngay.
● Giảm thiểu tỷ lệ mắc lỗi trong hệ thống Với tính năng cảnh báo lỗi
trong quá trình viết code, tỷ lệ mắc lỗi khi sử dụng TypeScript khá

thấp. Đồng thời, TypeScript sẽ trả lại giá trị null hoặc gợi ý chỉnh sửa
phù hợp. Từ đó giúp người dùng tiết kiệm được khơng ít thời gian sửa
lỗi.
● Giảm thiểu các bước thử nghiệm Với quy trình kiểm tra và báo lỗi tự
động, khi các biến dữ liệu đã nằm đúng chỗ, người dùng sẽ không cần
phải kiểm tra lại mà vẫn đảm bảo hệ thống vận hành trơn tru, hiệu
quả. Nhờ đó mà người dùng sẽ có nhiều thời gian hơn cho việc kiểm
tra chất lượng logic của hệ thống, tối ưu hiệu quả công việc.
● Hợp nhất mã đơn giản Có thể sau khi hoàn thiện một đoạn code và
cho chạy thử nghiệm, mọi thứ đều hoạt động tốt trong mơi trường đó.
Tuy nhiên, bạn có chắc chắn rằng đoạn code đó cũng sẽ hoạt động
trơn tru trong môi trường khác? Với TypeScript, người dùng có thể dễ
dàng hợp nhất mã để kiểm tra đánh giá đoạn mã vừa được tạo trước
đó bằng Typedef (kiểm tra biên dịch).
14


❖ Nhược điểm:
● Cần trình biên dịch riêng Để vận hành tệp TypeScript với đuôi .js
trên nền tảng Node.js, người dùng bắt buộc phải sử dụng trình biên
dịch.
● Thiết lập khó khăn Trước khi sử dụng TypeScript, cần đảm bảo rằng
máy chủ Node.js, trình thử nghiệm cũng như webpack có thể hoạt
động được với TypeScript để có thể vận hành. Ngoài ra, mỗi khi
người dùng áp dụng thêm library như Redux, React hay StyledComponent thì sẽ phải bổ sung cả Typedef.
● Vẫn là phiên bản mở rộng của JavaScript Nhìn chung, chức năng
chính của TypeScript là để biên dịch về JavaScript. Nó khơng phải là
ngơn ngữ có khả năng vận hành độc lập và thay thế cho JavaScript.
Chức năng của TypeScript bị giới hạn bởi chức năng của JavaScript,
được nâng cấp lên từ các điểm yếu của JavaScript. Nếu chỉ sử dụng

mỗi TypeScript, người dùng sẽ khơng thể hồn thiện được tất cả các
công đoạn của dự án. TypeScript chỉ thực sự hữu ích khi được kết hợp
và tối ưu cùng với các nền tảng, ngôn ngữ và công cụ khác.

2.4.

Dịch vụ Amazon S3:ch vụng: Amazon S3:
❖ Amazon S3 là gì? Amazon Simple Storage Service (Amazon S3) là một
dịch vụ lưu trữ đối tượng cung cấp khả năng thay đổi quy mô, mức độ sẵn
sàng của dữ liệu, độ bảo mật và hiệu suất hàng đầu trong ngành. Khách hàng
thuộc mọi quy mơ và ngành nghề có thể lưu trữ và bảo vệ dữ liệu thuộc mọi
kích thước cho hầu hết tất cả các trường hợp sử dụng, chẳng hạn như hồ dữ
liệu, ứng dụng hoạt động trên đám mây và ứng dụng di động. Với các lớp lưu
trữ tiết kiệm chi phí và tính năng quản lý dễ sử dụng, bạn có thể tối ưu hóa
chi phí, tổ chức dữ liệu và cấu hình các biện pháp kiểm sốt quyền truy cập
được tinh chỉnh để đáp ứng yêu cầu cụ thể về kinh doanh, tổ chức và tuân
thủ.
❖ Trường hợp sử dụng:

15


● Xây dựng hồ dữ liệu: Chạy các ứng dụng phân tích dữ liệu lớn, trí tuệ
nhân tạo (AI), máy học (ML) và điện toán hiệu suất cao (HPC) để mở
khóa thơng tin chun sâu về dữ liệu.
● Sao lưu và khôi phục dữ liệu quan trọng: Đáp ứng các yêu cầu về
Thời gian phục hồi mục tiêu (RTO), Điểm phục hồi mục tiêu (RPO)
và tuân thủ với những tính năng sao chép mạnh mẽ của S3.
● Lưu trữ dữ liệu với chi phí thấp nhất: Chuyển kho lưu trữ dữ liệu sang
các lớp lưu trữ của Amazon S3 Glacier để giảm thiểu chi phí, loại bỏ

sự phức tạp trong hoạt động và thu thập thông tin chuyên sâu mới.
● Chạy các ứng dụng hoạt động trên đám mây: Xây dựng các ứng dụng
hoạt động trên đám mây nhanh chóng, có khả năng di động mạnh mẽ
và dựa trên web, có thể tự động thay đổi quy mơ theo cấu hình có độ
sẵn sàng cao.

2.5.

Database PostgreSQL:
❖ PostgreSQL là gì?: PostgreSQL là một hệ thống quản trị cơ sở dữ liệu

quan hệ và đối tượng (object-relational database management system)
miễn phí và nguồn mở (RDBMS) tiên tiến nhất hiện nay. khả năng mở
rộng cao và tuân thủ các tiêu chuẩn kỹ thuật. Nó được thiết kế để xử lý
một loạt các khối lượng cơng việc lớn, từ các máy tính cá nhân đến kho
dữ liệu hoặc dịch vụ Web có nhiều người dùng đồng thời.
● PostgreSQL được phát triển bởi PostgreSQL Global
Development Group, Phát hành lần đầu: 08/07/1996
● PostgreSQL linh động có thể chạy được trên nhiều nền tảng
khác nhau như Mac OS X, Solaris và Windows.

16


● PostgreSQL là một phần mềm mã nguồn mở miễn phí bởi vậy
PostgreSQL có thể được dùng, sửa đổi và phổ biến bởi bất kỳ ai
cho bất kỳ mục đích nào.
● PostgreSQL có tính ổn định cao.
● PostgreSQL là hệ thống quản lý cơ sở dữ liệu đầu tiên triển khai
tính năng kiểm sốt đồng thời nhiều phiên bản (MVCC).

❖ Tính năng PostgreSQL: PostgreSQL tích hợp nhiều tính năng tuyệt

vời giúp hỗ trợ nhà phát triển xây dựng app đáp ứng các chức năng
phức tạp, truy vấn nhanh chóng và bảo mật duy trì tính tồn vẹn và độ
tin cậy. Để đáng tin cậy hơn, Postgresql cung cấp các tùy chọn bảo mật,
xác thực và khôi phục thảm họa khác nhau. PostgreSQL được chứng
minh là có khả năng mở rộng cao cả về số lượng dữ liệu và số lượng
người dùng có thể thao tác cùng lúc.
● Câu truy vấn phức hợp (complex query)

● Thủ tục sự kiện (trigger)
● Các khung nhìn (view)
● Tính tồn vẹn của các giao dịch (integrity transactions)
● Việc kiểm tra truy cập đồng thời đa phiên bản (multiversion
concurrency control)
● Truy vấn xử lý song song (parallel query)
● Sao chép dữ liệu dạng luồng (Streaming replication)

17


2.6.

Solidity

Hình 3.1. Ngơn ngữ Solidity
❖ Solidity là gì?

● Solidity là ngơn ngữ lập trình thơng dịch và hướng đối tượng được sử
dụng để phát triển các smart contract trên nền tảng Ethereum. Ethereum

là một nền tảng blockchain công cộng cho phép việc xây dựng và triển
khai các ứng dụng phi tập trung (decentralized applications - DApps) và
các smart contract.
● Solidity được tạo ra để hỗ trợ việc viết các smart contract trên Ethereum.
Smart contract là một đoạn mã mà khi triển khai trên blockchain, nó sẽ
thực hiện một số hành động theo các quy tắc đã được định sẵn và không
thể thay đổi. Các smart contract này là các giao thức tự động hố và tự
thực thi, khơng cần sự can thiệp từ bất kỳ bên thứ ba nào.

❖ Ưu điểm của solidity?
● Hỗ trợ chính thức của Ethereum: Solidity được phát triển và được
Ethereum hỗ trợ chính thức, đảm bảo tính tương thích và khả năng tích
hợp tốt với nền tảng Ethereum. Nó được thiết kế đặc biệt để làm việc với
các tính năng của Ethereum, bao gồm việc quản lý tài sản số, xác minh và
thực thi giao dịch, và thực hiện các tác vụ trong một môi trường phi tập
trung.
● Rộng rãi và phát triển mạnh mẽ: Solidity là một trong những ngôn ngữ
phổ biến nhất cho việc xây dựng smart contract trên Ethereum. Do đó, có
một cộng đồng lớn và sôi nổi của các nhà phát triển, tài liệu, và tài
nguyên hỗ trợ có sẵn. Bạn có thể tìm thấy nhiều ví dụ, mẫu mã, và thư
viện để giúp bạn trong quá trình phát triển.
18


● Cú pháp quen thuộc và linh hoạt: Solidity có cú pháp tương tự với ngơn
ngữ lập trình C++ và JavaScript, là những ngôn ngữ phổ biến trong cộng
đồng phát triển. Điều này làm cho Solidity dễ học và hiểu, đặc biệt đối
với những người đã quen thuộc với các ngơn ngữ này. Nó cũng cho phép
nhà phát triển thể hiện sự linh hoạt trong việc thiết kế và triển khai smart
contract.

● Kiểm soát và bảo mật: Solidity cho phép nhà phát triển xác định rõ các
quy tắc và điều kiện của smart contract. Bằng cách sử dụng Solidity, bạn
có thể kiểm soát hành vi của smart contract và đảm bảo tính chính xác và
an tồn. Solidity cung cấp các tính năng bảo mật như quản lý quyền truy
cập và kiểm tra tính hợp lệ của giao dịch.
● Tích hợp và mở rộng: Solidity có thể được tích hợp với các cơng cụ và
framework khác để tăng cường quy trình phát triển. Ví dụ, Hardhat,
Truffle, và Remix là những cơng cụ phổ biến mà hỗ trợ Solidity trong
việc phát triển, triển khai, và kiểm thử smart contract.
❖ Nhược điểm của solidity
● Vấn đề bảo mật: Solidity, giống như bất kỳ ngơn ngữ lập trình nào, có thể
gặp phải các lỗ hổng bảo mật. Việc phát triển smart contract phải cẩn
thận và kiểm tra kỹ lưỡng để đảm bảo tính an toàn và tránh các lỗ hổng
bảo mật.
● Khả năng chống lại thay đổi: Solidity là một ngôn ngữ phát triển mới và
đang trong quá trình phát triển liên tục. Điều này có thể dẫn đến sự thay
đổi cú pháp hoặc tính năng, làm cho các phiên bản cũ của smart contract
có thể khơng tương thích với các phiên bản Solidity mới hơn.
● Học và khó khăn cho người mới: Mặc dù Solidity có cú pháp tương tự
với một số ngơn ngữ lập trình phổ biến, nhưng việc học Solidity và hiểu
cách phát triển smart contract vẫn đòi hỏi sự đầu tư thời gian và nỗ lực.
Điều này có thể làm cho nó khó khăn đối với những người mới vào lĩnh
vực này.

2.7.

Hardhat
❖ Hardhat là gì?



Hardhat là một framework phát triển và kiểm thử các ứng dụng
blockchain, đặc biệt là các ứng dụng dựa trên Ethereum. Nó cung cấp
một mơi trường phát triển và công cụ giúp nhà phát triển xây dựng, triển
khai và kiểm thử các smart contract và ứng dụng phi tập trung một cách
dễ dàng và hiệu quả.
19








Môi trường phát triển: Hardhat cung cấp một môi trường phát triển cục
bộ cho việc phát triển các ứng dụng blockchain. Nhà phát triển có thể
triển khai và chạy các smart contract trên mạng cục bộ mà không cần kết
nối đến mạng blockchain thực tế. Điều này giúp tiết kiệm thời gian và
tăng tốc quá trình phát triển.
Triển khai và quản lý: Hardhat cung cấp cách dễ dàng để triển khai smart
contract và quản lý các phiên bản khác nhau của chúng trên nhiều mạng
blockchain. Nó hỗ trợ việc triển khai thơng qua các trình cung cấp dịch
vụ như Infura hoặc nền tảng blockchain cục bộ.
Mở rộng: Hardhat cho phép nhà phát triển mở rộng các chức năng và
tính năng của nó thơng qua các plugin. Các plugin có thể được sử dụng
để tích hợp các cơng cụ và thư viện bổ sung, tạo ra các báo cáo phân tích
thơng minh, và thực hiện các tác vụ phát triển tùy chỉnh khác.
❖ Ưu điểm của Hardhat












Môi trường phát triển cục bộ: Hardhat cung cấp một môi trường phát
triển cục bộ, cho phép nhà phát triển triển khai và chạy các smart
contract trên mạng cục bộ mà không cần kết nối đến mạng blockchain
thực tế. Điều này giúp tiết kiệm thời gian và tăng tốc q trình phát
triển.
Kiểm thử thơng minh: Hardhat cung cấp các công cụ và khung thử
nghiệm để kiểm thử các smart contract. Nhà phát triển có thể viết các
bài kiểm tra tự động để đảm bảo tính chính xác và độ tin cậy của smart
contract. Hardhat hỗ trợ việc kiểm thử thông qua các thư viện như
Mocha và Chai.
Triển khai và quản lý: Hardhat cung cấp cách dễ dàng để triển khai smart
contract và quản lý các phiên bản khác nhau của chúng trên nhiều mạng
blockchain. Nó hỗ trợ việc triển khai thơng qua các trình cung cấp dịch
vụ như Infura hoặc nền tảng blockchain cục bộ.
Mở rộng: Hardhat cho phép nhà phát triển mở rộng các chức năng và
tính năng của nó thơng qua các plugin. Các plugin có thể được sử dụng
để tích hợp các công cụ và thư viện bổ sung, tạo ra các báo cáo phân tích
thơng minh và thực hiện các tác vụ phát triển tùy chỉnh khác.
Tương thích với Solidity: Hardhat tương thích tốt với Solidity, ngơn ngữ
phổ biến cho việc phát triển smart contract trên Ethereum. Việc sử dụng
Hardhat và Solidity cùng nhau giúp nhà phát triển có một quy trình phát

triển tồn diện và hiệu quả.
❖ Nhược điểm của Hardhat



Đòi hỏi kiến thức và học tập: Sử dụng Hardhat đòi hỏi kiến thức và hiểu
biết về các khái niệm và công nghệ blockchain, cũng như việc làm quen
20



×