Chương 1: Giới thiệu tổng quan - Giới thiệu đề tài - Mục tiêu nghiên cứu - Ý nghĩa nghiên cứu - Phạm vi nghiên cứu - Yêu cầu chức năng - Yêu cầu phi chức năng Chương 2: Tìm hiểu cơ sở lý thuyết - Tìm hiểu về các kiến trúc hệ thống - Tìm hiểu về các công nghệ phù hợp để sử dụng trong việc xây dựng ứng dụng Chương 3: Thiết kế hệ thống - Phân tích hệ thống và đưa ra đặc tả cho ứng dụng - Đưa ra sự đồ hoạt động của từng chức năng Chương 4: Triển khai ứng dụng - Hướng dẫn sử dụng ứng dụng - Đánh giá hệ thống Chương 5: Đưa ra kết luận và hướng phát triển của hệ thống 5 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2. Kiến trúc hệ thống 2. Giới thiệu Kiến trúc hệ thống là một phần quan trọng không thể thiếu trong thiết kế phần mềm. Nó cung cấp một cái nhìn tổng quan về việc phát triển và quản lý một dự án phần mềm.
Kiến trúc hệ thống bao gồm các thành phần chính sau: - Các thành phần cấu tạo hệ thống: Bao gồm ngôn ngữ lập trình, framework và thư viện được sử dụng trong quá trình phát triển hệ thống. - Luồng dữ liệu và quy trình: Xác định cách dữ liệu được xử lý, lưu trữ và truyền tải trong hệ thống. Điều này bao gồm phân tích quy trình làm việc hiện tại và thiết kế quy trình mới để đạt được mục tiêu kinh doanh. - Ước tính số lượng người dùng, chi phí phát triển và duy trì hệ thống: Đánh giá và ước tính số lượng người dùng dự kiến sử dụng hệ thống, đồng thời xác định chi phí phát triển và duy trì hệ thống trong quá trình vận hành.
Kiến trúc Front-Back Kiến trúc Front-Back [3] (còn được gọi là kiến trúc Client-Server) là một kiểu kiến trúc quan trọng và phổ biến trong thiết kế hệ thống website. Theo kiến trúc này, ứng dụng được chia thành hai phần độc lập bao gồm: - Front-end: Đây là phần giao diện người dùng, được sử dụng để hiển thị nội dung và tương tác với người dùng. Front-end thường được xây dựng bằng các ngôn ngữ và công nghệ HTML, CSS, JavaScript, thư viện ReactJS và các framework như VueJS, Angular. Front-end cung cấp giao diện người dùng tương tác và có khả năng đáp ứng trên các thiết bị di động với kích thước màn hình khác nhau, giúp cung cấp trải nghiệm tốt cho người dùng.
- Back-end: Đây là phần xử lý logic, truy xuất và lưu trữ dữ liệu cho Front- end. Back-end thường được xây dựng bằng các ngôn ngữ và framework như PHP, Laravel, Nodejs, Python, Ruby, và sử dụng một số cơ sở dữ liệu để lưu trữ thông tin dữ liệu. Ngoài ra, phần Back-end cũng có trách nhiệm bảo mật dữ liệu và đảm bảo an toàn cho hệ thống khỏi các cuộc tấn công từ bên ngoài. Ưu điểm: - Kiến trúc Front-Back giúp tách biệt phần giao diện và xử lý logic của hệ thống, giúp việc phát triển và bảo trì trở nên dễ dàng hơn.
- Cung cấp khả năng mở rộng và mô-đun hóa ứng dụng, đồng thời tăng tính bảo mật và khả năng phát triển độc lập giữa các thành viên phát triển 1 dự án. Nhược điểm: 6 - Không phù hợp để xử lý tải quá lớn, gặp khó khăn trong việc phát triển đối với các dự án lớn. Kiến trúc Microservice Kiến trúc Microservice là kiến trúc trong đó hệ thống Back-end được phân tách thành nhiều service nhỏ, mỗi service đảm nhận một hoặc một nhóm các chức năng theo từng module cụ thể. Ví dụ trong một trang web bán hàng, nó có thể có các module như sản phẩm, khách hàng, đơn hàng.
Và mỗi module này có thể được tách thành một dự án riêng biệt, được gọi là microservice. Các microservice trong kiến trúc microservice là độc lập với nhau, có thể sử dụng kiến trúc và công nghệ khác nhau, thậm chí có thể sử dụng cơ sở dữ liệu riêng biệt. Các microservice trong kiến trúc microservice liên kết với nhau thông qua một thành phần gọi là API gateway hoặc message queue. API gateway là một điểm cuối (endpoint) đơn nhất mà các client có thể giao tiếp để truy cập vào các microservice.
Nó đảm bảo sự liên lạc giữa các microservice và cung cấp một giao diện đơn giản cho client giao tiếp với toàn bộ hệ thống. Message queue là một hệ thống phân phối thông điệp cho phép các microservice gửi và nhận thông điệp qua một hàng đợi, đảm bảo tính đồng bộ và truyền thông hiệu quả giữa các microservice. Ưu điểm: - Áp dụng nhiều công nghệ tùy theo nhu cầu mỗi chức năng. Hệ thống website có thể tận dụng tối đa các công nghệ mới nhất.
- Dễ dàng mở rộng hệ thống. - Linh hoạt triển khai các microservice đáp ứng tốt với tải hệ thống và tối ưu hóa hiệu năng. Nhược điểm: - Triển khai và quản lý kiến trúc microservice đòi hỏi nhân sự có kiến thức chuyên sâu về kiến trúc hệ thống. - Hệ thống có tính phức tạp cao.
Các microservice phải liên kết với nhau vì vậy mà xử lý lỗi phức tạp hơn các kiến trúc hệ thống khác. - Xây dựng và thiết kế hệ thống microservice đòi hỏi sự hiểu biết rõ ràng về các module và tương tác giữa chúng. Đòi hỏi kỹ năng thiết kế cao. Các công nghệ áp dụng 2.
Tổng quan về Laravel Laravel là một web Back-end framework [4] được viết bằng ngôn ngữ PHP. Cung cấp các tính năng phát triển như quản lý định tuyến, quản lý cơ sở dữ liệu, xác 7 thực người dùng. So với các ngôn ngữ Back-end khác, Laravel có cấu trúc an toàn, dễ sử dụng, dễ bảo trì và hiệu suất cao. Một số đặc điểm của Laravel: - Routing: Laravel có hệ thống routing mạnh mẽ, hỗ trợ các loại HTTP request như GET, POST, PUT, DELETE, … - Hệ thống middleware: giúp cho các người phát triển hệ thống xử lý các yêu cầu trước khi qua xử lý bởi ứng dụng.
Đồng thời xử lý dữ liệu, xác thực người dùng và kiểm tra quyền truy cập. - Sử dụng mô hình MVC (Model-View-Controller): phân chia ứng dụng thành các phần độc lập để dễ bảo trì và phát triển. - Hỗ trợ unit test: kiểm thử các đoạn code từ đó dễ dàng phát hiện lỗi trước khi đưa ra thị trường sử dụng. Để hiểu hơn về cách thức hoạt động của Laravel.
Các tính năng của Laravel được mô tả như sau: 2. Migration Trong Laravel, Migration là một công cụ mạnh mẽ giúp quản lý dữ liệu và bảng trong cơ sở dữ liệu một cách dễ dàng. Thay vì tạo dữ liệu trên cơ sở dữ liệu một cách thủ công và sử dụng Query Builder để quản lý. Laravel còn cung cấp phương pháp Migration để tạo, chỉnh sửa và xóa cấu trúc của cơ sở dữ liệu.
Ở mỗi Migration sẽ bao gồm hai phương thức chính là up và down. Trong phương thức up, người dùng có thể thêm bảng, cột và các thay đổi cấu trúc cơ sở dữ liệu. Ngược lại, phương thức down được sử dụng để thực hiện rollback, tức là hoàn tác các thay đổi được thực hiện bởi phương thức up. Trước khi sử dụng Migration, người dùng cần cấu hình thông tin kết nối cơ sở dữ liệu trong file .env sử dụng khi đang phát triển trên localhost và file /config/database.
Migration giúp cho việc quản lý cơ sở dữ liệu trở nên dễ dàng và linh hoạt hơn. Người dùng có thể theo dõi và kiểm soát các thay đổi cấu trúc cơ sở dữ liệu theo 8 thời gian, đồng thời cho phép đồng bộ hóa cấu trúc giữa các môi trường khác nhau của hệ thống ứng dụng. Đây là một cách tốt để quản lý cơ sở dữ liệu trong Laravel. Dễ dàng chuyển đổi các cấu trúc bảng sang một version mới chẳng hạn.
Ngoài ra, Migration đảm bảo tính nhất quán và dễ dàng triển khai với các thay đổi cấu trúc. Seeding và Factory Seeding và Factory là hai công cụ quan trọng trong Laravel được người dùng sử dụng để tạo dữ liệu mẫu và dữ liệu giả trong quá trình phát triển và kiểm thử hệ thống website. Chúng giúp đảm bảo tính chính xác và hiệu suất của hệ thống, đồng thời tiết kiệm thời gian so với việc tạo dữ liệu bằm thủ công. Seeding cho phép người dùng tạo dữ liệu mẫu trong cơ sở dữ liệu.
Để tạo một file seeding, người dùng có thể sử dụng câu lệnh sau: php artisan make:seeder SeederName Trong đó, “SeederName” là tên của file seeding mà người dùng muốn tạo. Sau khi thực hiện câu lệnh, Laravel sẽ tạo một file seeding mới trong thư mục database/seeders của dự án. File gốc của seeding là DatabaseSeeder.php, người dùng có thể tạo nhiều file seeding khác nhau nhưng phải gọi chúng trong hàm run() của file DatabaseSeeder. Để tiến hành chạy tất cả các file được gọi trong DatabaseSeeder.php và tạo dữ liệu, người dùng sử dụng câu lệnh: php artisan db:seed Trong những trường hợp cần tạo một lượng lớn dữ liệu giả, seeding trở nên không hiệu quả.
Thay vào đó, Laravel cung cấp Factory để người dùng có thể tạo số lượng lớn dữ liệu giả một cách dễ dàng. Để tạo một file Factory, người dùng có thể sử dụng câu lệnh: php artisan make:factory FactoryName Trong đó, “FactoryName” là tên của file factory mà người dùng muốn tạo. Sau khi thực hiện câu lệnh, Laravel sẽ tạo mộ file factory mới trong thư mục database/factories của dự án. Laravel còn cung cấp các hàm như fake() giúp người dùng tạo dữ liệu giả với các định dạng phổ biến như số điện thoại, công ty, màu sắc, số ngẫu nhiên, email, tên người dùng, mật khẩu, địa chỉ,.
Sau khi tạo file Factory, người dùng có thể gọi nó trong hàm run() của file seeding để chạy. Sử dụng Seeding hay Factory trong Laravel đều giúp người dùng dễ dàng tạo dữ liệu mẫu và dữ liệu giả, đồng thời giúp kiểm thử và phát triển ứng dụng một cách 9 hiệu quả. Tùy thuộc vào nhu cầu và mục tiêu mà người dùng chọn loại tạo dữ liệu giả phù hợp. Các công cụ này không chỉ đảm bảo tính chính xác của ứng dụng mà còn giúp tiết kiệm thời gian và công sức trong quá trình phát triển.
Mô hình MVC (Model-View-Controller) Mô hình MVC là mô hình phổ biến được sử dụng trong Laravel để tổ chức và quản lý mã nguồn của ứng dụng. Cách thức mà mô hình này hoạt động là người dùng gửi Request đến hệ thống và Routing sẽ định tuyến đến các Controller để xử lý. Controller sẽ tương tác với Model để cập nhật dữ liệu và sau đó truyền dữ liệu và lệnh tới View hiển thị giao diện. Routing Routing trong Laravel giúp định tuyến các tuyến đường dựa trên tên thay vì đường dẫn.
Điều này làm cho việc hiểu và tiếp cận Routing trở nên dễ dàng. Các file Routing được đặt trong folder routes.