6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
2.1 Phân biệt thiết kế UI trên hai nền tảng Android và IOS [12]
2.5.2 Xu hướng thiết kế ứng dụng 2020
Minh họa bằng hình ảnh
Việc minh họa đã được phát triển rất lâu trong thiết kế sản phẩm của ngành công nghệ kỹ thuật số. Và sự phát triển của nó trong những năm gần đây là vô cùng ấn tượng. Việc thiết kế sử dụng hình ảnh minh họa là rất phổ biến và cần thiết trong thiết kế ứng dụng vì nó giúp cho người dùng dễ hiểu, đơn giản, tạo cảm giác gần gũi thân thiện với giao diện ứng dụng. Bên cạnh đó những hình ảnh họa hay cũng sẽ dễ thu hút sự chú ý, tạo ấn tượng mạnh mẽ cho người dùng. Một trong những cách làm cho hình ảnh minh họa trở nên hấp dẫn hơn là bạn hãy làm cho nó động, cách này sẽ thu hút sự chú ý của người dùng và kích thích họ tương tác với sản phẩm của mình.
Đơn giản hóa giao diện người dùng
Các nhà thiết kế ứng dụng có thiên hướng tạo giao diện người dùng đơn giản hóa. Họ hiểu rằng, giao diện nên đơn giản và rõ ràng để có chức năng tốt hơn. Hầu hết, các thiết kế UI là thiết kế phẳng để phù hợp với màn hình kỹ thuật số. Các tính năng nổi bật của UI đơn giản hóa bao gồm:
- Sự rõ ràng và chức năng của UI.
- Tận dụng lợi thế của màn hình kỹ thuật số.
- Các yếu tố của sự tối giản được thực hiện trong thiết kế UI. - Không gian màn hình trống.
Vuốt là cử chỉ chính trong thiết kế ứng dụng
Một xu hướng thiết kế ứng dụng là cải tiến hơn nữa trong tính năng vuốt. Màn hình điện thoại di động đã có tính năng vuốt nhưng có một phạm vi để cải thiện. Các nút quá nhỏ để chạm vào trong những năm đầu của thiết kế ứng dụng. Bây giờ, các nút đủ lớn để vuốt chúng dễ dàng.
Hình khối bo tròn tự nhiên
Không chỉ riêng thiết kế ứng dụng, các hình khối mềm mại bo góc được sử dụng nhiều trong các bản thiết kế. Các hình bo góc tròn tạo sự nhẹ nhàng, uyển chuyển, thu hút và tăng tính tương tác giữa người dùng với ứng dụng.
Bảng màu tươi và kết hợp màu tương phản
Sự lựa chọn phù hợp cho bảng màu tươi là màu Pastel.
Hình 2.6:Ví dụ bảng màu tươi tông màu lạnh[13]
Hai màu đối diện của bánh xe màu được gọi là màu tương phản. Đặc trưng của cách phối màu này là tính đối lập lớn, tạo nên 1 sự chấn động, rất phù hợp để làm nổi bật một thứ gì đó. Nó cũng rất dễ tạo cảm giác chói mắt, phản cảm, khó chịu khi sử dụng nhiều.
Hình 2.7:Bảng màu tương phản[17]
2.6 Figma
Figma là công cụ được ra mắt vào năm 2016, với giao diện thân thiện và tính dễ sử dụng, Figma đã nhanh chóng nổi lên và trở thành một công cụ thiết kế giao diện người dùng phổ biến trong cộng đồng công nghệ toàn cầu. Một số thương hiệu lớn sử dụng Figma như Microsoft, Twitter, GitHub, Dropbox,... Khác với những công cụ thiết kế trước đây, Figma được thiết kế trên nền tảng đám mây[11].
Ưu điểm của Figma
• Tính tương thích: Figma có thể hoạt động tương thích trên tất cả các hệ điều hành có trình duyệt web, từ Windows, Linux, Macs cho đến Chromebooks đều có thể dùng công cụ này. Tính tới thời điểm này, đây là công cụ thiết kế duy nhất có thể làm được điều này.
• Hỗ trợ làm việc nhóm hiệu quả: mọi người trong team có thể dễ dàng làm việc với nhau tương tự như làm việc trên Google Docs. Mỗi thành viên trong nhóm đang xem hoặc chỉnh sửa file, Figma sẽ hiển thị đại diện bằng một avatar tròn trên thanh công cụ với tên riêng. • Chia sẻ file đơn giản: có thể chia sẻ file Figma bằng việc gửi link, người nhận link sẽ có
khả năng truy cập vào file đó. Nếu lựa chọn Link to selected frame người nhận sẽ nhìn thấy ngay frame đang chọn lúc chia sẻ. Đây là tính năng được rất nhiều designer đánh giá cao và sử dụng.
• Tất cả mọi thứ đều được lưu trữ online: mọi thứ trên Figma được lưu trên cloud. Ta có thể tạo và sắp xếp file theo project, mỗi file chia ra làm nhiều page tùy theo nhu cầu để dễ dàng quản lý.
Lựa chọn Figma để thiết kế ứng dụng
• Photoshop thực sự quá chậm và gặp nhiều khó khăn khi design ui/ux cho cả web & mobile app.
• Có hai công cụ design dạng vector nổi bật là Sketch và Figma, cả hai công cụ đều có các chức năng tương tự nhau, nhưng Sketch chỉ dành riêng cho hệ điều hành MacOs, nên nhóm quyết định sử dụng Figma để thiết kế ứng dụng.
2.7 Java và Spring-bootJava Java
Java là ngôn ngữ lập trình back-end phổ biến nhất, là ngôn ngữ lập trình đa năng, đa nền tảng, hướng đối tượng (object-oriented) và có tính đồng thời (concurrent) được phát triển bởi Oracle. Ngôn ngữ này có thể biên dịch (compile) mã lệnh dưới dạng mã byte Java (Java bytecode) để chạy trên Java Virtual Machine (JVM). Nhờ đó, bất kỳ thiết bị nào có thể cài đặt JVM thì có thể chạy được các ứng dụng viết bằng Java[18].
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. 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ỏ, phiên bản cơ bản chỉ khoảng 2MB; trong suốt: hoạt động một cách trong suốt với lập trình viên). Spring là một mã nguồn mở, được phát triển, chia sẻ và có cộng đồng người dùng rất lớn.
Spring Framework được xây dựng dựa trên hai nguyên tắc thiết kế chính là: Dependency Injection và Aspect Oriented Programming.
Những tính năng 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 Boot
Spring Boot là một dự án phát triển bởi JAV (ngôn ngữ java) trong hệ sinh thái Spring framework. Giúp cho các lập trình viên đơn giản hóa quá trình lập trình một ứng dụng với Spring, chỉ tập trung vào việc phát triển business cho ứng dụng.
Những công đoạn cần thiết để phát triển ứng dụng Spring:
• Tạo một dự án sử dụng Maven với các dependency cần thiết của Spring MVC và Servlet API.
• Một tập tin web.xml để khai báo DispatcherServlet của Spring MVC. • Một tập tin cấu hình của Spring MVC.
• Các class Controller trả về data response khi có request đến.
• Cuối cùng là phải có một web server dùng để triển khai ứng dụng lên chạy.
Trong các công đoạn này, chỉ có công đoạn tạo một class Controller thì có thể khác cho các ứng dụng khác nhau vì mỗi ứng dụng có một yêu cầu khác nhau. Còn các công đoạn khác thì như nhau.
Spring Boot giúp tạo dự án Spring một cách nhanh chóng và cấu hình đơn giản. Một số tính năng nổi bật của Spring Boot:
• Tạo các ứng dụng Spring độc lập.
• Nhúng trực tiếp Tomcat, Jetty hoặc Undertow (không cần phải triển khai thành file WAR) • Các starter dependency giúp việc cấu hình Maven đơn giản hơn.
• Tự động cấu hình Spring khi cần thiết
• Không sinh code cấu hình và không yêu cầu phải cấu hình bằng XML.
Ưu điểm của Java và Spring Boot
• Tạo các ứng dụng Spring độc lập
• Khả năng mở rộng cao • Tài liệu tuyệt vời
• Được xây dựng cho các ứng dụng quy mô lớn sử dụng cách tiếp cận đám mây Hệ sinh thái mở rộng
Tại sao lại lựa chọn Java và Springboot để hiện thực back-end
Một số so sánh giữa các ngôn ngữ, framework back-end phổ biến hiện nay:
Python là một ngôn ngữ rất dễ học, dễ sử dụng, có cú pháp đơn giản, cộng đồng hỗ trợ lớn, nhiều công cụ và công nghệ hỗ trợ. Đây cũng là ngôn ngữ mà được rất nhiều người yêu thích, tuy nhiên Python lại có những hạn chế như tốc độ khá chậm, chạy đơn luồng, vì vậy sẽ không thể đáp ứng được khi ứng dụng càng ngày càng có nhiều kết nối.
NodeJS có đặc điểm là tốc độ rất nhanh, xử lý nhiều kết nối tốt, dễ dàng mở rộng để phát triển. Tuy nhiên NodeJS gây hao tốn tài nguyên và thời gian. NodeJS còn non trẻ, giữa các phiên bản có sự thay đổi rất lớn.
Không có Visual Studio thì khó có thể viết code. ASP.NET có phí sử dụng khá cao, không phù hợp sử dụng cho các doanh nghiệp nhỏ hay các cá nhân.
Java là một ngôn ngữ mạnh, linh hoạt, bảo mật cao, viết một lần thực thi khắp nơi, lập trình đa luồng tốt có thể đáp ứng những hệ thống cần tốc độ cao. Hệ thống viết bằng Java có kiến trúc thiết kế tốt thì dễ mở rộng, có tính hướng đối tượng đầy đủ phù hợp với các nghiệp vụ phức tạp. Lịch sử dày dặn giúp Java có cộng đồng hỗ trợ mạnh mẽ về các tài nguyên có sẵn và tài liệu đầy đủ. Lập trình viên Java dễ tìm, dễ dàng kế thừa hệ thống. Kết hợp với việc nhóm đã có kinh nghiệm làm việc với Java nên việc lựa chọn ngôn ngữ này sẽ dễ dàng phát triển hệ thống hơn.
2.8 MySQL
MySQL là hệ quản trị cơ sở dữ liệu tự do nguồn mở phổ biến nhất thế giới và được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng. Vì MySQL là hệ quản trị cơ sở dữ liệu tốc độ cao, ổn định và dễ sử dụng, có tính khả chuyển, hoạt động trên nhiều hệ điều hành cung cấp một hệ thống lớn các hàm tiện ích rất mạnh. Với tốc độ và tính bảo mật cao, MySQL rất thích hợp cho các ứng dụng có truy cập CSDL trên internet. Người dùng có thể tải về MySQL miễn phí từ trang chủ. MySQL có nhiều phiên bản cho các hệ điều hành khác nhau: phiên bản Win32 cho các hệ điều hành dòng Windows, Linux, Mac OS X, Unix, FreeBSD, NetBSD, Novell NetWare, SGI Irix, Solaris, SunOS,..[19]
MySQL được sử dụng trong đề tài để lưu trữ thông tin khóa học, thông tin người dùng và thông tin thanh toán khóa học của người dùng.
Ưu điểm của MySQL.
• Dễ sử dụng: MySQL là cơ sở dữ liệu tốc độ cao, ổn định, dễ sử dụng và hoạt động trên nhiều hệ điều hành cung cấp một hệ thống lớn các hàm tiện ích rất mạnh.
• Độ bảo mật cao: MySQL rất thích hợp cho các ứng dụng có truy cập CSDL trên Internet khi sở hữu nhiều nhiều tính năng bảo mật thậm chí là ở cấp cao.
• Đa tính năng: MySQL hỗ trợ rất nhiều chức năng SQL được mong chờ từ một hệ quản trị cơ sở dữ liệu quan hệ cả trực tiếp lẫn gián tiếp.
• Khả năng mở rộng và mạnh mẽ: MySQL có thể xử lý rất nhiều dữ liệu và hơn thế nữa nó có thể được mở rộng nếu cần thiết.
• Nhanh chóng: Việc đưa ra một số tiêu chuẩn cho phép MySQL để làm việc rất hiệu quả và tiết kiệm chi phí, do đó nó làm tăng tốc độ thực thi.
Nhược điểm của MySQL
• Giới hạn: Theo thiết kế, MySQL không có ý định làm tất cả và nó đi kèm với các hạn chế về chức năng mà một ứng dụng có thể cần.
• Độ tin cậy: Cách các chức năng cụ thể được xử lý với MySQL (ví dụ tài liệu tham khảo, các giao dịch, kiểm toán,. . . ) làm cho nó kém tin cậy hơn so với một số hệ quản trị cơ sở dữ liệu quan hệ khác.
• Dung lượng hạn chế: Nếu số bản ghi lớn dần lên thì việc truy xuất dữ liệu là khá khó khăn, khi đó chúng ta sẽ phải áp dụng nhiều biện pháp để tăng tốc độ truy xuất dữ liệu như là chia tải database này ra nhiều server, hoặc tạo cache MySQL.
2.9 Firebase
Firebase là một nền tảng phát triển ứng dụng di động và web cung cấp nhiều công cụ và dịch vụ để giúp phát triển các ứng dụng chất lượng cao, phát triển cơ sở người dùng và kiếm thêm lợi nhuận[3].
Các dịch vụ của Firebase có thể được chia thành 2 nhóm:
Nhóm dịch vụ phát triển và thử nghiệm ứng dụng bao gồm: • Realtime Database • Authentication • Test Lab • Crashlytics • Cloud Functions • Firestore • Cloud Storage • Performance Monitoring • Crash Reporting • Hosting
Nhóm dịch vụ phát triển và thu hút người dùng bao gồm: • Firebase Analytics • Invites • Cloud Messaging • Predictions • AdMob • Dynamic Links • Adwords • Remote Config • App Indexing
Nhằm mục đích nâng cao trải nghiệm người dùng và tiết kiệm thời gian hiện thực những tính năng phức tạp, yêu cầu bảo mật cao, hoạt động chính xác, cũng như phân tích, thu hút người dùng thì nhóm quyết định lựa chọn một số dịch vụ của Firebase bao gồm:
Authentication
Xác thực Firebase cung cấp dịch vụ backend, SDK dễ sử dụng và thư viện UI được tạo sẵn để xác thực người dùng với ứng dụng.
Thông thường, sẽ mất vài tháng để thiết lập hệ thống xác thực và cần có một đội ngũ chuyên dụng để duy trì hệ thống đó. Nhưng nếu sử dụng Firebase thì có thể thiết lập toàn bộ hệ thống dưới 10 dòng mã sẽ xử lý mọi thứ cho ứng dụng, bao gồm các hoạt động phức tạp như hợp nhất tài khoản[21].
Có thể xác thực người dùng ứng dụng thông qua các phương pháp sau: • Email & Password
• Số điện thoại • Google • Facebook
• Twitter • ...
Sử dụng Xác thực Firebase giúp xây dựng các hệ thống xác thực an toàn và dễ dàng hơn, đồng thời cải thiện trải nghiệm đăng nhập cho người dùng.
Firebase Dynamic Links
Deep links là các URL đưa người dùng đến một nội dung, hầu hết các liên kết web là Deep links[21].
Firebase hiện có thể sửa đổi các Deep links thành Dynamic Links. Dynamic Links cho phép người dùng trực tiếp đến một vị trí cụ thể trong ứng dụng.
Dưới đây là một số cách sử dụng cơ bản cho Dynamic Link:
• Chuyển hướng người dùng từ web trong thiết bị di động sang ứng dụng.
• Giúp người dùng dễ dàng chia sẻ ứng dụng bằng các mạng xã hội, khi ứng dụng có một số sự kiện nhằm tăng tương tác giữa người dùng và ứng dụng thì Dynamic Link có thể dẫn người dùng đến đúng sự kiện đó trong ứng dụng.
2.10 Google Cloud Platform
Google Cloud Platform là nền tảng điện toán đám mây do Google cung cấp, với các dịch vụ máy ảo, lưu trữ, phân tích dữ liệu, cùng nhiều công nghệ tiên tiến khác. Google Cloud Platform cung cấp Cơ sở hạ tầng dưới dạng dịch vụ, Nền tảng là dịch vụ và môi trường máy tính Serverless[6]. Một số dịch vụ của Google Cloud Platform:
Tính toán:
• App Engine: Nền tảng là một Dịch vụ để triển khai Java, PHP, Node.js, Python, C#, . Các ứng dụng Net, Ruby và Go.
• Compute Engine: Cơ sở hạ tầng như một Dịch vụ để chạy các máy ảo Microsoft Windows và Linux.
• Kubernetes Engine: Container như một dịch vụ dựa trên Kubernetes.
• Cloud Functions: Chức năng như một Dịch vụ để chạy mã theo sự kiện được viết bằng Node.js hoặc Python.
• ...
Lưu trữ và cơ sở dữ liệu:
• Cloud Storage: Lưu trữ đối tượng với bộ nhớ đệm cạnh tích hợp để lưu trữ dữ liệu phi cấu trúc.
• Cloud SQL: Cơ sở dữ liệu dưới dạng Dịch vụ dựa trên MySQL và PostgreSQL. • Cloud BigTable: Quản lý dịch vụ cơ sở dữ liệu NoQuery.
• ...
Nhằm mục đích triển khai hệ thống và lưu trữ các phiên bản mã nguồn nên nhóm chọn một số dịch vụ:
1. Compute Engine
Đây là dịch vụ IaaS (infrastructure as a service) cung cấp những máy chủ ảo (VMs) hiệu suất cao được đặt trên nền tảng hạ tầng của Google. Compute Engine còn tích hợp với những dịch vụ tính toán khác của Google Cloud như Trí tuệ nhân tạo và Phân tích dữ liệu.
Trong đề tài này nhóm sử dụng dịch vụ để triển khai back-end Spring Boot để có thể kết