GIỚI THIỆU ĐỀ TÀI
PHÂN TÍCH THIẾT KẾ BÀI TOÁN
Khảo sát hiện trạng
Ngày càng có nhiều doanh nghiệp lựa chọn website dạng thương mại điện tử thay cho website truyền thống Những doanh nghiệp lớn đã ứng dụng dạng website này và gặt hái được con số ấn tượng về lượng truy cập và doanh thu: Thế Giới Di Động, Điện Máy Xanh, Bách Hóa Xanh Ngay cả các cửa hàng kinh doanh mỹ phẩm, nhà thuốc, thời trang cũng xây dựng website bán hàng có tích hợp tính năng và thanh toán.
Mục đích của việc thiết kế website dạng thương mại điện tử nhằm tránh lệ thuộc vào các sàn thương mại điện tử, cũng như tăng độ tiếp cận của doanh nghiệp đến với khách hàng Theo số liệu từ Statista, độ tuổi mua sắm trên sàn thương mại điện tử nhiều nhất là từ 25-34 Vì vậy, nếu đối tượng khách hàng tiềm năng của doanh nghiệp nằm trong phân khúc 25-34 thì việc thiết kế website thương mại điện tử là điều cực kỳ cần thiết.
Vậy hiện trạng nhu cầu của khách hàng hiện nay đã thay đổi như thế nào?
Và các hệ thống hiện tại đã và đang đáp ứng như thế nào đối với nhu cầu của người dùng? Chúng ta hãy cùng đi tìm hiểu.
2.1.1.Về khách hàng a Website cung cấp đầy đủ sản phẩm, dịch vụ và tiện ích
Khi khách hàng truy cập vào website là bạn đã nắm trong tay cơ hội biến
“người dùng” thành “khách mua hàng” Do đó sản phẩm và dịch vụ phải được sắp xếp theo từng danh mục rõ ràng Ngoài ra, khi khách hàng click vào để tìm hiểu bất kỳ sản phẩm nào thì sản phẩm đó phải có đầy đủ thông tin, thương hiệu, mô tả, xuất xứ, giá cả để khách hàng yên tâm lựa chọn mua hàng. b Giao diện thu hút khách hàng tiềm năng
Giao diện thu hút là một trong những yếu tố để người dùng dành nhiều thời gian để ở lại website của bạn Việc thiết kế giao diện phải dựa vào việc hiểu khách hàng tiềm năng Khách hàng ở độ tuổi nào, sở thích, thói quen mua sắm từ đó bạn sẽ thiết kế giao diện để thu hút khách hàng tiềm năng của bạn Nếu khách hàng tiềm năng không thấy giao diện của website bạn có sự thu hút, thì cho dù có nhiều người khen đẹp thì cũng không để tạo ra doanh thu tốt.
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly c Giao diện tương thích với thiết bị di động
Thiết bị di động ngày càng chiếm ưu thế hơn so với máy tính và laptop Do đó, khi thiết kế giao diện và hình ảnh cho website, bạn nên lưu ý kiểm tra lại một lần nữa xem đã hiển thị đúng kích thước trên thiết bị di động hay chưa Nếu khi hiển thị trên điện thoại hình ảnh bị sai tỷ lệ hoặc bố cục chữ bị rối mắt thì bạn nên điều chỉnh để tránh việc khách hàng cảm thấy khó chịu với giao diện và thoát ra ngoài.
2.1.2.Về các hệ thống đã có
Ngày càng có nhiều doanh nghiệp lựa chọn website dạng thương mại điện tử thay cho website truyền thống Những doanh nghiệp lớn đã ứng dụng dạng website này và gặt hái được con số ấn tượng về lượng truy cập và doanh thu: Thế Giới Di Động, Điện Máy Xanh, Bách Hóa Xanh Ngay cả các cửa hàng kinh doanh mỹ phẩm, nhà thuốc, thời trang cũng xây dựng website bán hàng có tích hợp các tính năng và thanh toán, theo dõi đơn hàng.
2.1.3.Về ứng dụng tương tự
Về các ứng dụng tương tự trên thị trường, cũng đã phát triển các tính năng và nhu cầu của khách hàng như:
- Cung cấp đầy đủ sản phẩm, dịch vụ và tiện ích.
- Thiết kế giao diện dễ dùng và hiện đại.
- Tích hợp đa dạng các phương thức thanh toán
- Tương thích với các thiết bị di động.
- Cung cấp đầy đủ thông tin của doanh nghiệp.
Tổng quan chức năng
2.2.1 Biểu đồ UseCase tổng quan
- Authentication: Cho phép khách hàng và quản trị viên đăng nhập bằng tài khoản đăng ký, đăng nhập bằng Facebook, thay đổi password, đăng xuất ra khỏi website.
- Quản lý user: Cho phép quản trị viên xem danh sách khách hàng, thêm/sửa/xóa tài khoản khách hàng.
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
- Quản lý kho hàng: Cho quản trị viên theo dõi và quản lý kho hàng, có thể thêm/sửa/xóa các mặt hàng trong kho.
- Thêm vào giỏ hàng: Cho phép khách hàng thêm sản phẩm muốn mua vào giỏ hàng
- Tạo mới một đơn hàng: Cho phép khách hàng đặt một đơn hàng và hiển thị đơn hàng mới vào trang admin để quản lý.
Xác nhận các tác nhân tham gia hệ thống:
1 Admin Quản lý tài khoản khách hàng, quản lý kho, xem/thay đổi thông tin khách hàng, xem/thay đổi thông tin mặt hàng.
2 Customer Đăng ký tài khoản, đăng nhập, xem/thay đổi thông tin của mình, xem sản phẩm, thêm vào giỏ hàng.
PROJECT 2 Giáo viên hướng dẫn: Lê Th
Sơ đồ UseCase tổng quát của hệ thống
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
1 Authentication Cho phép người dùng đăng ký, đăng nhập vào hệ thống website, thay đổi password.
2 Quản lí khách hàng Quản trị viên có thể xem danh sách khách hàng, Nhân viên thêm/sửa/xóa tài khoản khách hàng.
3 Quản lý kho hàng Quản trị viên có thể xem danh sách mặt hàng,
Có thể thêm/sửa/xóa mặt hàng trong kho hàng.
4 Thêm vào giỏ hàng Khách hàng xem danh sách sản phẩm, xem chi tiết sản phẩm, và chọn thêm vào giỏ hàng.
5 Khách hàng đặt hàng Khách hàng vào giỏ hàng, xem giỏ hàng và đặt đơn hàng đang có trong giỏ.
6 Quản lí đơn hàng Quản trị viên vào trang danh sách các đơn hàng, xem chi tiết/sửa/xóa đơn hàng
2.2.2 Biểu đồ use case phân rã từng module
2.2.2.1 Phân rã use case “Đăng nhập”
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly -Tính năng kiểm tra người dùng: Khi nhập tên người dùng mong muốn, Javascript có thể lập tức dò cơ sở dữ liệu xem lịch sử đặt trước của người dùng Tính năng này hoàn toàn tự động, không cần tải lại trang.
-Tính năng cập nhật liên tục: Không tốn thời gian tải lại, trang có thể tự động cập nhật.
-Tính năng gợi ý từ khóa trên khung tìm kiếm: Tự động nhận diện, tính toán xem bạn đang muốn gì và hiện ra list gợi ý liên quan nhất.
Mọi ứng dụng đều trở nên hữu ích và thú vị hơn khi chúng được kích hoạt tự động. Javascript cho phép thực hiện chuỗi hành động đã được lên kịch bản sẵn ngay khi người dùng mới truy cập vào trang.
3.2.3 Client-side rendering (CSR) vs Server-side rendering (SSR)
Theo truyền thống, khi xây dựng các trang web hay ứng dụng web đều có chiến lược chung là đó là server sẽ chuẩn bị sẵn các nội dung HTML để gửi xuống trình duyệt. Các nội dung này sẽ được trình duyệt kết hợp với CSS để tạo thành tranh web cho bạn sử dụng.
Sau này, xuất hiện các Javascript framework hiện đại như ReactJS, VueJS… đã làm thay đổi cách tiếp cận khi phát triển ứng dụng web, cách tiếp cận mới mang tới khả năng giảm gánh nặng cho server, xây dựng mô hình phân tán thay vì tập trung tại server. Đến đây, rất nhiều diễn đàn lại nảy sinh tranh luận gay gắt xem cách tiếp CSR hay SSR, cái nào tốt hơn, cái nào tối ưu?
Server Side Rendering (SSR) là gì? Đây là cơ chế cổ điển, được dùng rất phổ biến từ xưa đến nay rồi Gọi là Server Side Rendering vì mọi thứ sẽ được xử lý tập trung ở phía server.
Về cơ bản thì luồng của cơ chế này như hình bên dưới đây:
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
Có thể tóm gọn lại gồm các bước như sau:
Khi trình duyệt gửi một request tới server, server sẽ xử lý logic, lấy dữ liệu trong database, làm bla bla… cuối cùng tạo sẵn nội dung HTMl và trả lại cho trình duyệt. Trình duyệt nhận được nội dung HTML, dựa vào nội dung HTML mà nó có thể tải thêm các file javascript hay CSS để hiển thị nội dung trang HTML
Có lẽ phần lớn các trang web kiểu như vnexpress, dantri, vntalking… đều đang sử dụng cách tiếp cận này.
Client Side rendering (CSR) là gì ?
Cách tiếp cận này thì hoàn toàn khác với cách SSR Hiểu đơn giản với cách tiếp cận này thì việc render HTML, CSS sẽ được thực hiện ở client Khi trình duyệt gửi yêu cầu tới server, máy chủ sẽ gửi một loạt tài nguyên cần thiết để khởi tạo và chạy ứng dụng web, từ đó việc render nội dung sẽ thực hiện trên trình duyệt.
Kiểu tiếp cận này khá phổ biến với các ứng dụng web kiểu Single Page (SPA – Single Page Application), ứng dụng sẽ lấy dữ liệu thông qua REST API.
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
Các ứng dụng kiểu SPA sẽ không phải tải lại trang mỗi khi nội dung thay đổi Với các
JS framework hiện đại như React, Vue, Angular… đều hỗ trợ để xây dựng ứng dụng kiểu như vậy.
Vậy khi nào sử dụng SSR hay CSR?
- Client-side rendering Ứng dụng có giao diện phức tạp, tương tác nhiều với người dùng
Dữ liệu lớn và động
Tập trung vào các trang web phục vụ lượng lớn người dung
- Server-side rendering Đồ họa phức tạp, chuyên sâu vào tính toán, cần sức mạnh xử lý của server.
Dữ liệu nhỏ, ít thay đổi
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
JavaScript Framework là thư viện được xây dựng dựa vào ngôn ngữ lập trình JavaScript Từ đó, mỗi framework được tạo ra để phục cho từng lĩnh vực khác nhau Hiện nay, có rất nhiều JavaScript Framework thông dụng như: NuxtJs, NextJs, VueJs, ReactJs, Angular…
Trong đó VueJs, ReactJs và Angular là những framework rất mạnh để tạo một trang web nhưng không mang lại khả năng tối ưu SEO cho một trang web bán hàng NextJs nổi lên là một framework có nhiều người và công ty tin tưởng sử dụng vì nhiều tính năng hữu ích, giúp nhanh chóng xây dựng một ứng dụng web bán hàng Next.js là một open-source React front-end framework được bổ sung các tính năng như Server Side Rendering (SSR) và Static Site Generation (SSG) Next.js được xây dựng dựa trên thư viện React có nghĩa là Next.js lấy những lợi thế của React và bổ sung các tính năng.
Server Side Rendering: SSR cho phép máy chủ access tất cả required data và xử lý javaScript để hiển thị lên trang web Theo cơ chế này thì hầu hết các xử lý logic đều ở phía máy chủ Trong đó, máy chủ thực hiện xử lý và tiến hành các thao tác với cơ sở dữ liệu để thông dịch (render) ra thành HTML, sau đó gửi phản hồi cho khách hàng Trình duyệt của khách hàng cũng sẽ chỉ hiển thị HTML này.
Search Engine Optimization (SEO): 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 trình theo dõi SEO.
Next.js cũng cho phép bạn chỉnh sửa thẻ của một trang web, điều mà bạn không thể thực hiện trong React Thẻ góp phần vào xếp hạng SEO của trang web.
3.3 Ngôn ngữ lập trình Java
Java là ngôn ngữ lập trình đa nền tảng (cross-platform), được phát triển bởi James Gosling tại Sun Microsystems (nay là Oracle Corporation) Ngôn ngữ lập trình này ra đời vào năm 1995 và được thiết kế để có thể chạy trên các nền tảng khác nhau, từ máy tính cá nhân đến thiết bị di động, các máy chủ và thiết bị nhúng.
Java sử dụng cấu trúc lập trình hướng đối tượng (object-oriented programming
- OOP) và được xây dựng trên cơ sở của ngôn ngữ lập trình C++ Nó cung cấp một môi trường chạy ảo (virtual machine) gọi là Java Virtual Machine (JVM),
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly giúp các chương trình Java có thể chạy trên nhiều nền tảng khác nhau mà không cần phải biên dịch lại.
Hiện tại, Java là một trong những ngôn ngữ lập trình phổ biến nhất hiện nay, được sử dụng rộng rãi trong các ứng dụng di động, phát triển web, lập trình trên các thiết bị nhúng, máy tính cá nhân, máy chủ, game và nhiều lĩnh vực khác. Các tính năng của Java:
CÔNG NGHỆ VÀ THUẬT TOÁN SỬ DỤNG
Ngôn ngữ lập trình Java
Java là ngôn ngữ lập trình đa nền tảng (cross-platform), được phát triển bởi James Gosling tại Sun Microsystems (nay là Oracle Corporation) Ngôn ngữ lập trình này ra đời vào năm 1995 và được thiết kế để có thể chạy trên các nền tảng khác nhau, từ máy tính cá nhân đến thiết bị di động, các máy chủ và thiết bị nhúng.
Java sử dụng cấu trúc lập trình hướng đối tượng (object-oriented programming
- OOP) và được xây dựng trên cơ sở của ngôn ngữ lập trình C++ Nó cung cấp một môi trường chạy ảo (virtual machine) gọi là Java Virtual Machine (JVM),
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly giúp các chương trình Java có thể chạy trên nhiều nền tảng khác nhau mà không cần phải biên dịch lại.
Hiện tại, Java là một trong những ngôn ngữ lập trình phổ biến nhất hiện nay, được sử dụng rộng rãi trong các ứng dụng di động, phát triển web, lập trình trên các thiết bị nhúng, máy tính cá nhân, máy chủ, game và nhiều lĩnh vực khác. Các tính năng của Java:
Java được thiết kế để có thể chạy trên nhiều nền tảng khác nhau, vì vậy nó rất phù hợp cho việc phát triển các ứng dụng đa nền tảng Java sử dụng một máy ảo (JVM - Java Virtual Machine) để chạy mã nguồn, vì vậy mã nguồn được viết một lần và có thể chạy trên nhiều hệ điều hành khác nhau mà không cần thay đổi.
- Quản lý bộ nhớ tự động
Java có tính năng tự động quản lý bộ nhớ, tức là nó tự động thu dọn các vùng nhớ không sử dụng nữa để giảm thiểu các lỗi bộ nhớ Điều này giúp cho các ứng dụng được viết bằng Java có thể chạy ổn định và tránh các lỗi liên quan đến bộ nhớ.
Java có thể xử lý đa luồng, cho phép chương trình thực hiện nhiều tác vụ cùng một lúc Điều này giúp cho các ứng dụng có thể chạy nhanh và hiệu quả hơn, đặc biệt là khi phải xử lý nhiều tác vụ cùng một lúc.
Java có các tính năng bảo mật như kiểm tra kiểu tĩnh và kiểm tra lỗi trên đường dẫn Java được thiết kế để giảm thiểu các lỗ hổng bảo mật và các vấn đề liên quan đến an ninh.
- Hỗ trợ các thư viện và công cụ phát triển mạnh mẽ
Java có các thư viện tiêu chuẩn và các công cụ phát triển như IDE (Integrated Development Environment) để giúp các nhà phát triển tạo ra các ứng dụng dễ dàng hơn Các thư viện và công cụ này cung cấp các tính năng như: tạo giao diện người dùng, xử lý dữ liệu, kết nối cơ sở dữ liệu và nhiều hơn nữa,
Java được sử dụng rộng rãi trong lĩnh vực di động bao gồm: các thư viện hỗ trợ việc phát triển ứng dụng di động, đóng gói ứng dụng thành các file jar hoặc apk, cung cấp các tính năng như xử lý đa nhiệm, kết nối mạng và tích hợp với các thiết bị phần cứng như máy ảnh.
- Tính độc lập với nền tảng
Java có thể chạy trên nhiều nền tảng khác nhau và không phụ thuộc vào bất kỳ nền tảng cụ thể nào Điều này giúp cho các ứng dụng Java có thể được triển khai trên nhiều hệ thống khác nhau mà không cần sửa đổi mã nguồn.
- Tính kế thừa và đa hình
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly Java là ngôn ngữ lập trình hướng đối tượng (OOP), vì vậy nó có các tính năng như kế thừa, đa hình và đóng gói Các tính năng này giúp cho mã nguồn được tái sử dụng và giảm thiểu sự trùng lặp trong mã nguồn.
Java có tính năng mở rộng, cho phép các nhà phát triển thêm các tính năng mới vào ngôn ngữ bằng cách tạo các thư viện và API riêng Điều này giúp cho Java có thể được sử dụng trong nhiều lĩnh vực khác nhau và được phát triển theo các hướng khác nhau. Ưu và nhược điểm của Java Ưu điểm của Java Độ tin cậy cao
Quản lý bộ nhớ tự động
Công cụ phát triển phong phú
Tốc độ chậm hơn so với các ngôn ngữ lập trình gần sát với phần cứng, chẳng hạn như C hoặc C++.
Java có thể chạy trên nhiều nền tảng khác nhau, nhưng ứng dụng này có thể cần đến một trình biên dịch hoặc máy ảo Java riêng biệt để có thể chạy trên các thiết bị di động.
Sử dụng bộ nhớ lớn hơn so với một số ngôn ngữ lập trình khác.
Cú pháp phức tạp hơn so với một số ngôn ngữ lập trình khác
3.3.2 Giới thiệu Spring Framework và Spring boot
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 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ỏ, version 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 được chia làm nhiều module khác nhau, tùy theo mục đích phát triển ứng dụng mà ta dùng 1 trong các module đó
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
Spring Boot là một dự án trong hệ sinh thái Spring Framework, được phát triển bởi Pivotal Team (hiện là một phần của VMware) Nó là một nền tảng phát triển ứng dụng Java dựa trên Spring Framework với mục tiêu đơn giản hóa việc xây dựng ứng dụng Java Dưới đây là một số điểm quan trọng về Spring Boot:
Kiến thức Nền tảng Spring Framework: Spring Boot sử dụng và mở rộng Spring Framework, nên nó đòi hỏi một kiến thức cơ bản về Spring.
Hệ quản trị cơ sở dữ liệu
Cơ sở dữ liệu (Database) là một tập hợp các dữ liệu có tổ chức, thường được lưu trữ và truy cập điện tử từ hệ thống máy tính Khi cơ sở dữ liệu phức tạp hơn, chúng thường được phát triển bằng cách sử dụng các kỹ thuật thiết kế và mô hình hóa chính thức.
Hệ quản trị cơ sở dữ liệu (Database Management System) là một phần mềm để lưu trữ và truy xuất dữ liệu của người dùng trong khi xem xét các biện pháp bảo mật thích hợp Nó bao gồm một nhóm các chương trình thao tác cơ sở dữ liệu Hệ quản trị cơ sở dữ liệu chấp nhận yêu cầu dữ liệu từ một ứng dụng và hướng dẫn hệ điều hành cung cấp dữ liệu cụ thể Trong các hệ thống lớn, nó giúp người dùng và phần mềm bên thứ ba lưu trữ và truy xuất dữ liệu.
3.4.2 Chức năng của hệ cơ sở dữ liệu
Cung cấp môi trường tạo lập cơ sở dữ liệu: Hệ quản trị CSDL đóng vai trò cung cấp cho người dùng một ngôn ngữ định nghĩa dữ liệu để mô tả, khai báo kiểu dữ liệu, các cấu trúc dữ liệu.
Cung cấp cách cập nhật và khai thác dữ liệu: Hệ quản trị CSDL cung cấp cho người dùng ngôn ngữ thao tác dữ liệu để diễn tả các yêu cầu, các thao tác cập nhật và
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly khai thác cơ sở dữ liệu: Cập nhật (nhập, sửa, xóa dữ liệu), Khai thác (tìm kiếm, kết xuất dữ liệu).
Cung cấp các công cụ kiểm soát, điều khiển các truy cập vào cơ sở dữ liệu: Nhằm đảm bảo thực hiện một số yêu cầu cơ bản của hệ cơ sở dữ liệu Bao gồm: Đảm bảo an ninh và ngăn chặn các truy cập bất hợp pháp; Duy trì tính nhất quán của dữ liệu
MySQL là hệ quản trị cơ sở dữ liệu sử dụng mã nguồn mở phổ biến nhất thế giới và được các chuyên gia lập trình rất ưa chuộng trong quá trình phát triển web, phát triển ứng dụng của 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 MySQL có một số đặc điểm:
Hệ quản trị cơ sở dữ liệu MySQL chính là một trong những phần mềm quản trị CSDL dạng server based, hệ gần giống với SQL server.
MySQL là phần mềm quản lý dữ liệu thông qua CSDL Và mỗi một CSDL đều có bảng quan hệ chứa dữ liệu riêng biệt.
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly MySQL có cơ chế quản lý sử dụng riêng giúp cho mỗi người sử dụng đều có thể quản lý cùng lúc một hay nhiều CSDL khác nhau Và mỗi người dùng đều có 1 username và password để truy nhập và truy xuất đến CSDL
MySQL tương thích tốt với môi trường PHP, giúp hệ thống hoạt động mạnh mẽ.
MongoDB là một cơ sở dữ liệu mã nguồn mở và là cơ sở dữ liệu NoSQL(*) hàng đầu, được hàng triệu người sử dụng MongoDB được viết bằng C++.
(*) NoSQL là 1 dạng CSDL mã nguồn mở không sử dụng Transact-SQL để truy vấn thông tin NoSQL viết tắt bởi: None-Relational SQL, hay có nơi thường gọi là Not- Only SQL CSDL này được phát triển trên Javascript Framework với kiểu dữ liệu JSON (Cú pháp của JSON là “key:value”) NoSQL ra đời như là 1 mảnh vá cho những khuyết điểm và thiếu xót cũng như hạn chế của mô hình dữ liệu quan hệ RDBMS về tốc độ, tính năng, khả năng mở rộng, memory cache,
Ngoài ra, MongoDB là một cơ sở dữ liệu đa nền tảng, hoạt động trên các khái niệm Collection và Document, nó cung cấp hiệu suất cao, tính khả dụng cao và khả năng mở rộng dễ dàng.
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
3.4.5 So sánh SQL và NoSQL
Tham số SQL NoSQL Định nghĩa Cơ sở dữ liệu SQL chủ yếu được gọi là RDBMS hoặc Cơ sở dữ liệu quan hệ
Cơ sở dữ liệu NoSQL chủ yếu được gọi là cơ sở dữ liệu không liên quan hoặc phân tán Design for RDBMS truyền thống sử dụng cú pháp và truy vấn SQL để phân tích và lấy dữ liệu để có thêm thông tin chi tiết Chúng được sử dụng cho các hệ thống OLAP.
Hệ thống cơ sở dữ liệu NoSQL bao gồm nhiều loại công nghệ cơ sở dữ liệu khác nhau Các cơ sở dữ liệu này được phát triển để đáp ứng nhu cầu trình bày cho sự phát triển của ứng dụng hiện đại.
(SQL) Không có ngôn ngữ query
Type SQL databases là cơ sở dữ liệu dựa trên bảng NoSQL databases có thể dựa trên tài liệu, cặp khóa-giá trị, cơ sở dữ liệu biểu đồ
Schema SQL databases có lược đồ được xác định trước NoSQL databases sử dụng lược đồ động cho dữ liệu phi cấu trúc.
Khả năng mở rộng SQL databases có thể mở rộng theo chiều dọc NoSQL databases có thể mở rộng theo chiều ngang
Ví dụ Oracle, Postgres, and MS-
Phù hợp cho Đây là 1 lựa chọn lý tưởng cho môi trường truy vấn phức tạp
Không phù hợp với truy vấn phức tạp
Năm phát triển Nó được phát triển vào những năm 1970 để giải quyết các vấn đề với lưu trữ tệp phẳng Được phát triển vào cuối những năm 2000 để khắc phục các vấn đề và hạn chế của SQL databases.
Open-source Một sự kết hợp của mã nguồn mở như Postgres & MySQL, và thương mại như Oracle
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly Được sử dụng tốt nhất cho
RDBMS database là tùy chọn thích hợp để giải quyết các vấn đề về ACID.
NoSQL được sử dụng tốt nhất để giải quyết các vấn đề về tính khả dụng của dữ liệu
Tầm quan trọng Nó nên được sử dụng khi hiệu lực dữ liệu là siêu quan trọng Sử dụng khi nó quan trọng hơn để có dữ liệu nhanh hơn dữ liệu chính xác
Lựa chọn tốt nhất Khi bạn cần hỗ trợ truy vấn động Sử dụng khi bạn cần mở rộng quy mô dựa trên yêu cầu thay đổi Tính năng tốt nhất Hỗ trợ đa nền tảng, Bảo mật và miễn phí Dễ sử dụng, hiệu suất cao và công cụ linh hoạt.
Performance SQL hoạt động tốt và nhanh thì việc desgin tốt là cực kì quan trọng và ngược lại.
PHÁT TRIỂN VÀ TRIỂN KHAI ỨNG DỤNG
Thiết kế kiến trúc
4.1.1.Lựa chọn kiến trúc phần mềm
- Em chọn mô hình MVC vì MVC (Model – View – Controller) là một kiến trúc phần mềm hay mô hình thiết kế được sử dụng trong kỹ thuật phần mềm Nó giúp cho các developer tách ứng dụng của họ ra 3 thành phần khác nhau Model, View và Controller Mỗi thành phần có một nhiệm vụ riêng biệt và độc lập với các thành phần khác.
- Các thành phần của MVC:
+Model: Đây là thành phần chứa tất cả các nghiệp vụ logic, phương thức xử lý, truy xuất database, đối tượng mô tả dữ liệu như các Class, hàm xử lý…
+View: Đảm nhận việc hiển thị thông tin, tương tác với người dùng, nơi chứa tất cả các đối tượng GUI như textbox, images…Hiểu một cách đơn giản, nó là tập hợp các form hoặc các file HTML
+Controller: Giữ nhiệm vụ nhận điều hướng các yêu cầu từ người dùng và gọi đúng những phương thức xử lý chúng… Chẳng hạn thành phần này sẽ nhận request từ url và form để thao tác trực tiếp với Model. Ưu điểm và nhược điểm của MVC:
- Ưu điểm Thể hiện tính chuyên nghiệp trong lập trình, phân tích thiết kế Do được chia thành các thành phần độc lập nên giúp phát triển ứng dụng nhanh, đơn giản, dễ nâng cấp, bảo trì
- Nhược điểm Đối với dự án nhỏ việc áp dụng mô hình MVC gây cồng kềnh, tốn thời gian trong quá trình phát triển Tốn thời gian trung chuyển dữ liệu của các thành phần.
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
Kiến trúc Microservice (Microservice Architecture)
Microservice là một loại kiến trúc phần mềm hướng dịch vụ, tập trung vào việc xây dựng một loạt các thành phần tự quản lý tạo nên ứng dụng Không giống như các ứng dụng nguyên khối được xây dựng dưới dạng một đơn vị không thể chia tách, các ứng dụng microservice bao gồm nhiều thành phần độc lập output ra các API.
Cách tiếp cận microservice tập trung chủ yếu vào các độ ưu tiên của chức năng dành cho người dùng, trong khi cách tiếp cận nguyên khối được tổ chức xung quanh các lớp công nghệ, giao diện người dùng và cơ sở dữ liệu Cách tiếp cận microservice đã trở thành một xu hướng trong những năm gần đây khi ngày càng nhiều doanh nghiệp đang phát triển nhanh và sử dụng nhiều công nghệ DevOps.
Microservice rất quan trọng, đơn giản vì chúng đơn giản hóa sự phức tạp trong các hệ thống Bằng cách chia hệ thống hoặc ứng dụng thành nhiều phần nhỏ hơn, làm giảm trùng lặp, tăng sự gắn kết và dễ dàng kết nối giữa các bộ phận thông qua giao thức RESTFul API, do đó làm cho các thành phần hệ thống tổng thể dễ hiểu hơn, dễ mở rộng hơn và dễ thay đổi hơn.
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly Ưu điểm:
Các component có kết nối lỏng lẻo dẫn đến dễ cách ly, dễ test và khởi động nhanh.
Vòng đời phát triển nhanh hơn Tính năng mới được phát triển nhanh hơn và tính năng cũ được cấu trúc lại dễ hơn.
Các service có thể deploy độc lập nên ứng dụng dễ đọc, dễ tạo các bản vá hơn.
Những issue, ví dụ liên quan đến memry leak một trong các service, bị cô lập và có thể không làm sập ứng dụng.
Việc áp dụng các công nghệ mới dễ hơn Các component có thể được nâng cấp độc lập với nhau.
Các mô hình scale phức tạp và hiệu quả hơn có thể được thiết lập Các service quan trọng có thể scale hiệu quả hơn Các component riêng sẽ khởi động nhanh hơn và cải thiện thời gian khởi động của cả hệ thống.
Các team tham gia sẽ ít phụ thuộc lẫn nhau Kiến trúc này rất thích hợp cho các đội Agile.
Phức tạp hơn về mặt tổng thể vì các component khác nhau có các stack công nghệ khác nhau nên buộc team phải tập trung đầu tư thời gian để theo kịp công nghệ. Deploy toàn bộ ứng dụng phức tạp hơn vì có nhiều container và nền tảng ảo hóa liên quan. Ứng dụng được scale hiệu quả hơn nhưng thiết lập nâng cấp sẽ phức tạp hơn vì nó sẽ yêu cầu nâng cao nhiều tính năng như truy tìm dịch vụ (service discovery), định tuyến DNS,…
Yêu cầu một team-size lớn để maintain ứng dụng vì có nhiều component và công nghệ khác nhau.
Các thành viên trong team chia sẻ các skill khác nhau dựa trên component họ làm nên sẽ tạo ra sự khó khăn khi thay thế và chia sẻ kiến thức.
Stack công nghệ phức tạp và khó để học hơn.
Thời gian phát triển ban đầu là chậm nên thời gian để có thể làm marketing lâu hơn.
Yêu cầu cơ sở hạ tầng phức tạp Thông thường sẽ yêu cầu nhiều container (Docker) và nhiều máy JVM để chạy.
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
Biểu đồ tổng quan của hệ thông
Các thành phần của hệ thống:
1 Client: Nơi gửi request đến hệ thống microservice.
Là nơi để chứa các metadata của các microservice instances (bao gồm vị trí location, host port,…) Các microservice instance được đăng ký với service registry khi khởi động và sẽ hủy đăng ký khi bị shut down Các thành phần khác cần tìm thông tin của một microservice nào đó thì sẽ tìm thông qua service registry.
Khi chúng ta gọi đến bất kỳ service nào từ browser, chúng ta không thể gọi trực tiếp bằng tên của chúng như ví dụ Product Service vì những tên service như vậy phải được bí mật và chỉ sử dụng trong nội bộ các service với nhau. Nếu chúng ta có nhiều instance của một service, mỗi instance lại sử dụng một port khác nhau Vậy làm thế nào chúng ta có thể gọi tất cả các service từ browser và phân tán những request đến các instance đó thông qua các cổng khác nhau? Câu trả lời là sử dụng một Gateway.
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly Một gateway là một entry point đơn trong hệ thống, được dùng để handle các request bằng cách định tuyến chúng đến các service tương ứng Nó cũng có thể được dùng để xác thực, giám sát và làm nhiều việc khác.
Chứa các nghiệp vụ và lưu trữ dữ liệu liên quan đến sản phẩm
Chứa các nghiệp vụ và lưu trữ dữ liệu liên quan đến đơn hàng
Chứa các nghiệp vụ và lưu trữ dữ liệu liên quan đến thanh toán
7 Giao tiếp giữa các Service
Thiết kế chi tiết
Một số thiết kế giao diện em hướng tới sử dụng trong website:
- Kích thước màn hinh: 24inch
- Số lượng màu sắc hỗ trợ: đen, trắng, đỏ, xanh…
- Vị trí hiển thị thông điệp phản hồi: hiển thị dưới dạng inline message
- Thiết kế nút: To, rõ ràng, màu xanh phối cùng chữ trắng …
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
4.2.2 Biểu đồ thực thể liên kết ERD
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
Hình 4.2.2 Biểu đô lớp tổng quan
Biểu đồ lớp gồm có:
- Thực thể User: id, first_name, last_name, avatar_url, public_id, email, password, phone_number, address_id, role, locked, enable, created_at, updated_at.
- Thực thể Address: id, full_address, city, user_id, created_at, updated_at, create_by, updated_by.
- Thực thể Review: id, note, user_id, product_id, create_date, created_at, updated_at, create_by, updated_by;
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
- Thực thể Category: id, name, parent _id, icon, created_at, updated_at, create_by, updated_by.
- Thực thể Product: id, category_id, description, image_url, sku, price_unit, quantity, created_at, updated_at, create_by, updated_by.
- Thực thể Image: id, thumbnail_url, product_id, created_at, updated_at, create_by, updated_by.
- Thực thể Order: id, order_date, , total_price, payment_id, delivery_status, delivery_address ,status, user_id, created_at, updated_at, create_by, updated_by.
- Thực thể OrderItem: id, quantity, order_id, product_id, create_at, updated_at, create_by, updated_by.
- Thực thể Brand: id, name, image_url, public_id, create_at, updated_at, create_by, updated_by.
- Thực thể Banner: id, name, image_url, public_id, create_at, updated_at, create_by, updated_by.
Quan hệ giữa các lớp thực thể:
- User và Review có quan hệ 1 – n
- User và Order có quan hệ 1 – n
- User và Address có quan hệ 1 – 1
- Review và Product có quan hệ n – 1
- Product và Image có quan hệ 1 – n
- Order và Order Item có quan hệ 1-n
- Product và Category có quan hệ n – 1
- Product và Brand có quan hệ n – 1
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
STT Tên trường Kiểu dữ liệu Ghi chú Ràng buộc
1 id String Khóa định danh Khóa chính
2 first_name String Họ người dùng
3 last_name String Tên người dùng
4 avatar_url String Link ảnh
7 phone_numbe r String Số điện thoại
10 enable String Trạng thái kích hoạt
STT Tên trường Kiểu dữ liệu Ghi chú Ràng buộc
1 id String Khóa định danh Khóa chính
3 user_id String Id user Khóa ngoại
4 product_id String Id product Khóa ngoại
5 Create_date String Ngày tạo
STT Tên trường Kiểu dữ liệu Ghi chú Ràng buộc
1 id String Khóa định danh Khóa chính
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
2 name String Tên sản phẩm
4 image_id String Mã ảnh
8 category_id String Id Category Khóa ngoại
9 Sale_price Double Giá sau khi giảm
10 Brand_id String Mã thương hiệu
11 Category_id String Mã loại sản phẩm
12 Review_id String Mã đánh giá
STT Tên trường Kiểu dữ liệu Ghi chú Ràng buộc
1 id String Khóa định danh Khóa chính
2 full_address String Địa chỉ
3 city String Thành phố/Tỉnh
4 user_id String Id user Khóa ngoại
STT Tên trường Kiểu dữ liệu Ghi chú Ràng buộc
1 id String Khóa định danh Khóa chính
2 category_name String Tên loại sản phẩm
3 category_icon String Link icon
4 parent_category_id String Id loại sản phẩm cha Khóa ngoại
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
STT Tên trường Kiểu dữ liệu Ghi chú Ràng buộc
1 id int Khóa định danh Khóa chính
2 first_name String Họ người dùng
3 last_name String Tên người dùng
5 phone_number String Số điện thoại
7 user_id String Id User Khóa ngoại
8 full_address String Địa chỉ đầy đủ
STT Tên trường Kiểu dữ liệu Ghi chú Ràng buộc
1 id int Khóa định danh Khóa chính
2 product_id String Mã sản phẩm
4 order_id String Id order Khóa ngoại
STT Tên trường Kiểu dữ liệu Ghi chú Ràng buộc
1 id int Khóa định danh Khóa chính
2 name String Tên thương hiệu
3 image_url String Link hình ảnh
4 public_id String Id public
STT Tên trường Kiểu dữ liệu Ghi chú Ràng buộc
1 id int Khóa định danh Khóa chính
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
3 image_url String Link hình ảnh
4 public_id String Id public
Xây dựng ứng dụng
4.3.1 Thư viện va công cụ sử dụng
Danh sách thư viện và công cụ sử dụng:
Mục đích Công cụ Địa chỉ URL
IDE Lập trình Visual studio code https://code.visualstudio.com/
Envirement NodeJS https://nodejs.org/en/
IDE Lập trình Intellij https://www.jetbrains.com/idea/
Envirement JDK 17 https://www.oracle.com/in/java/technologies/downloads/
Kết quả đạt được bao gồm hoàn thiện các chức năng như authentication, quản lí người dùng, khách hàng thêm vào giỏ hàng, đặt hàng…
4.3.3 Một số giao diện thiết kế
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
Trang xem thông tin chi tiết:
Trang danh sách sản phẩm:
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
Trang giỏ hàng của khách hàng:
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly
4.3.4 Minh họa chức năng chính
- Người dùng nhập username và password để đăng nhập.
- Hệ thống sẽ kiểm tra username và password có tồn tại không.
- Nếu tồn tại, cho phép đăng nhập.
- Nếu không thì hiển thị thông báo lỗi.
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly Chức năng đăng ký
- Khách hàng chọn đăng ký
- Khách hàng điền đầy đủ thông tin cần thiết vào form đăng ký
- Hệ thống sẽ kiểm tra các trường trong form người dùng nhập có chuẩn không
- Hệ thống sẽ kiểm tra xem người đã tồn tại trong hệ thống chưa
- Hệ thống sẽ lưu người dùng vào cơ sở dữ liệu nếu tất cả các thông tin hợp lệ
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly Chức năng xem giỏ hàng
- Khách hàng đăng nhập thành công
- Khách hàng chọn vao trang giỏ hàng
- Hệ thống trả về danh sách giỏ hàng và hiển thị lên màn hình.
Kiểm thử
PROJECT 3 Giáo viên hướng dẫn: Đinh Thị Hà Ly