1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo môn phát triển phần mềm mã nguồn mở Đề tài tìm hiểu về framework laravel và so sánh công nghệ Đi kèm springboot

22 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm hiểu về Framework Laravel và So sánh công nghệ đi kèm Springboot
Tác giả Lê Minh Phước, Nguyễn Tiến Anh, Nguyễn Duy Dương
Người hướng dẫn Nguyễn Trọng Phúc
Trường học Trường Đại học Giao thông Vận tải
Chuyên ngành Phát triển phần mềm mã nguồn mở
Thể loại Báo cáo
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 22
Dung lượng 1,9 MB

Nội dung

Trong phần này, chúng ta sẽ cùng khám phá chi tiết hơn về lý do tại sao Laravel lại trở thành sự lựa chọn hàng đầu của cộng đồng lập trình PHP, các tính năng nổi bật của nó, và cách màLa

Trang 1

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

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI

KHOA CÔNG NGHỆ THÔNG TIN

ĐỀ TÀI: TÌM HIỂU VỀ FRAMEWORK LARAVEL VÀ

SO SÁNH CÔNG NGHỆ ĐI KÈM SPRINGBOOT

Lớp: Công nghệ thông tin 4

Mã sinh viên Họ và tên thành viên

211213343 Lê Minh Phước

211213703 Nguyễn Tiến Anh

211202521 Nguyễn Duy Dương

Giảng viên hướng dẫn: Nguyễn Trọng Phúc

Hà Nội, ngày 8 tháng 9 năm 2024

1

Trang 2

Lời mở đầu

Trong bối cảnh công nghệ phát triển không ngừng, các framework đã trở thành công cụ quantrọng giúp lập trình viên xây dựng ứng dụng web một cách nhanh chóng, hiệu quả và bảo mật.Trong đó, Laravel nổi lên như một trong những framework PHP phổ biến nhất hiện nay Điềunày xuất phát từ nhu cầu thực tế của các doanh nghiệp và dự án phát triển ứng dụng web hiệnđại, đòi hỏi tính mở rộng, bảo trì dễ dàng và khả năng tích hợp với nhiều công nghệ khác

Việc nghiên cứu và tìm hiểu về Laravel không chỉ đơn thuần là học cách sử dụng một công cụlập trình Nó còn giúp chúng ta hiểu rõ hơn về cách xây dựng một ứng dụng web chuyên nghiệp,

từ việc quản lý cơ sở dữ liệu, xử lý yêu cầu người dùng, cho đến việc tối ưu hóa hiệu suất và bảomật Laravel cung cấp một hệ sinh thái phong phú, hỗ trợ tối đa cho lập trình viên trong quá trìnhphát triển, giúp giải quyết các vấn đề thường gặp khi xây dựng ứng dụng

Trong phần này, chúng ta sẽ cùng khám phá chi tiết hơn về lý do tại sao Laravel lại trở thành

sự lựa chọn hàng đầu của cộng đồng lập trình PHP, các tính năng nổi bật của nó, và cách màLaravel giúp đơn giản hóa việc xây dựng ứng dụng web so với các framework khác

2

Trang 3

I Giới thiệu 4

1.1 Lịch sử hình thành Laravel? 4

1.1.1 PHP và các framework đầu tiên 4

1.1.2 Sự ra đời của Laravel 4

1.2 License 4

II Kiến trúc Laravel 5

2.1 Tầng ứng dụng của Laravel 6

2.2 Design Pattern 7

2.2.1 MVC 7

2.2.2 Singleton Pattern 9

2.2.3 Repository Pattern 11

2.2.4 Dependency Injection Pattern 11

2.2.5 Observer Pattern 15

III Các tính năng nổi bật của Laravel 17

3.1 Routing 17

3.2 Eloquent ORM 18

3.3 Blade Templating Engine 20

3.4 Authentication và Authorization 21

3.5 Queues & Jobs 22

3.6 Artisan CLI 22

Báo cáo kĩ thuật

3

Trang 4

Tìm hiểu về framework Laravel

I Giới thiệu

1.1 Lịch sử hình thành Laravel?

1.1.1 PHP và các framework đầu tiên

PHP (PHP: Hypertext Preprocessor) ra đời vào năm 1994 do Rasmus Lerdorf phát triển, ban

đầu là một tập hợp các tập lệnh để theo dõi truy cập cá nhân trên web PHP nhanh chóng trởthành ngôn ngữ phổ biến để xây dựng web nhờ tính dễ sử dụng, khả năng nhúng vào HTML, vàtốc độ xử lý nhanh

Tuy nhiên, khi các dự án web ngày càng lớn, việc quản lý mã trở nên phức tạp, từ đó cácframework PHP ra đời để giúp tổ chức mã nguồn tốt hơn, giảm thiểu lỗi và tăng tốc độ pháttriển Một số framework nổi bật giai đoạn đầu gồm:

 CodeIgniter: Nổi tiếng vì dễ học và không yêu cầu cấu hình nhiều, nhưng thiếu các tính nănghiện đại như hệ thống ORM mạnh mẽ và bảo mật tốt

 Symfony: Một framework mạnh mẽ và linh hoạt, nhưng cú pháp phức tạp và yêu cầu cấuhình nhiều hơn, gây khó khăn cho các lập trình viên mới

1.1.2 Sự ra đời của Laravel

Nhận thấy những hạn chế của các framework trước, Taylor Otwell phát triển Laravel vào năm

2011 với mục tiêu mang lại sự dễ dàng sử dụng và các tính năng hiện đại cho lập trình viên PHP.Laravel nhanh chóng trở nên phổ biến nhờ cú pháp đơn giản, tích hợp nhiều tính năng mạnh mẽ

mà các framework trước không có hoặc làm chưa tốt

1.2 License

Laravel sử dụng giấy phép MIT (MIT License) Đây là một giấy phép phần mềm mã nguồn mở, cho phép bạn tự do sử dụng, sao chép, chỉnh sửa và phân phối phần mềm, miễn là bạn giữ lại thông báo bản quyền ban đầu và miễn trừ trách nhiệm trong mã nguồn

Cụ thể, giấy phép MIT rất đơn giản và linh hoạt, với các điều khoản chính sau:

4

Trang 5

1 Bạn có quyền sử dụng mã nguồn cho bất kỳ mục đích nào, bao gồm mục đích thương mại.

2 Bạn có thể chỉnh sửa và phân phối mã nguồn hoặc các phiên bản đã chỉnh sửa của nó

3 Bạn cần giữ lại bản quyền và miễn trừ trách nhiệm của giấy phép MIT trong mã nguồn

Laravel, được phát hành dưới giấy phép này, cho phép các nhà phát triển sử dụng framework trong các dự án cá nhân và thương mại mà không có giới hạn lớn

II Kiến trúc Laravel

Trước khi đi vào tìm hiểu chi tiết Laravel thì ta cần tìm hiểu về quy trình biên dịch và thực thi

mã lệnh trong Laravel như thế nào để ta có được một cái nhìn tổng quan về khả năng làm việc vàhiệu suất của riêng các framework PHP là một ngôn ngữ thông dịch (interpreted language), điều này có nghĩa là mã nguồn PHP không được biên dịch trước thành mã máy (machine code) Thay vào đó, nó được thực thi trực tiếp bởi máy chủ khi có yêu cầu (request) Điều này khác với các ngôn ngữ biên dịch như Java (sử dụng trong Spring Boot), nơi mã nguồn phải được biên dịch trước khi chạy

Cơ chế này hoạt động như sau:

- Client ( Brower ): Người dùng gửi yêu cầu HTTP tới server qua trình duyệt, yêu cầu

một trang web hoặc tài nguyên cụ thể

- Web Server( Nginx /Apache ): Máy chủ web nhận yêu cầu và phân tích dường dẫn

URL Nếu yêu cầu liên quan đến mã PHP, nó sẽ chuyển yêu cầu đến trình thông dịch PHP

- PHP Interpreter ( PHP-FPM/ mod_php) :

+ Đây là phần mềm thực hiện mã PHP Khi nhận yêu cầu, nó đọc mã PHP từ file nguồn

+ Tại sao lại dùng trình thông dịch ? PHP là một ngôn ngữ thông dịch, có nghĩa là

mã không cần phải biên dịch trước Thay vào đó, nó được thực thi ngay lập tức,

Trang 6

giúp giảm thời gian phát triển Tức là trình thông dịch của PHP sẽ đọc file php từng dòng một và chuyển đổi nó thành mã máy và thực thi ngay lập tức và không cần phải biên dịch thành file nhị phân trước như trong các ngôn ngữ biên dịch Cũng bởi điều này nên tốc độ thực thi có thể chậm hơn so với các ngôn ngữ biên dịch ( do phải phân tích và dịch mã runtime ) nhưng bù lại việc phát triển và thử nghiệm nhanh chóng hơn rất nhiều

- Mã PHP Source Code: Đây là mã nguồn mà bạn viết ( ví dụ, mã trong file

route/web.php ) Trình thông dịch PHP sẽ đọc và thực thi mã này, thực hiện các phép toán và logic được định nghĩa trong mã

- Bytecode (Opcache):

+ Khi mã PHP được thực thi, nó được biên dịch thành bytecode ( mã giữa ) để tối

ưu hiệu suất ( nếu mã được biên dịch thành bytecode một lần, lần sau chỉ cần thựcthi bytecode đó mà không cần biên dịch lại từ mã nguồn, tiết kiệm thời gian )+ Opcache là một phần mở rộng của PHP giúp lưu trữ bytecode để không phải biên dịch lại mã nguồn cho mỗi yêu cầu, Opcache có chức năng lưu trữ bytecode (trong RAM ), tái sử dụng bytecode, có thể tự động tạo lại bytecode mỗi khi có yêu cầu cho một file PHP mà bytecode không có trong bộ nhớ ( chẳng hạn sau khikhởi động lại server ), phát hiện thay đổi trong file ( nếu có sự thay đổi trong file Opcache cũng sẽ phát hiện thay đổi đó và biên dịch lại mã nguồn để tạo bytecode mới thay thế bytecode cũ trong bộ nhớ )

- Machine Code: Bytecode được chuyển đổi thành mã máy, có thể được CPU thực thi

- Rendered View (HTML): Mã PHP có thể trả về nội dung HTML, sau đó nó sẽ được

gửi trở lại cho trình duyệt dưới dạng một trang web

- Cuối cùng, máy chủ gửi phản hồi HTTP chứa HTML đã render trở lại cho trình duyệt.

- Cũng giống như xử lý dữ liệu bình thường, nhưng mà biên dịch khi gặp các route API thì không có việc chuyển đổi thành bytecode và mã máy mà sau khi biên dịch mà xử lý logic dữ liệu, logic nghiệp vụ lấy dữ liệu chuyển thành dạng json để trả về cho clien

2.1 Tầng ứng dụng của Laravel

6

Client ( Brower )  Web Server ( Nginx / Apache )  PHP Interpreter (PHP-FPM/ mod_php)

Response to Client ( API )

JSON Response (API Data)  PHP Code (Controller/ API Logic )

View: Tầng mà người dùng tương tác, hiển thị dữ liệu và nhận đầu vào từ người dùng.

Trang 8

 Model: Được quản lý bởi Eloquent ORM, cung cấp cách tương tác với cơ sở dữ liệu theo

cách rất tự nhiên và cú pháp dễ hiểu

Tương tác với cơ sở dữ liệu thông qua Eloquent ORM: Cho phép lập trình viên dễ dàngtương tác với cơ sở dữ liệu mà không cần viết truy vấn SQL Hỗ trợ nhiều quan hệ dữliệu phức tạp như one-to-one, one-to-many, many-to-many chỉ bằng vài dòng mã.Eloquent tự động ánh xạ tên bảng nếu nó khác với tên model (bằng cách chỉ định $table)

Hỗ trợ truy vấn trực quan bằng cách sử dụng các phương thức như where(), get(), find()

Trang 9

tự động tạo tất cả các phương thức CRUD chỉ với một dòng khai báo route, ví dụ:Route::resource('users', UserController::class).

 View: Laravel sử dụng Blade template engine, một trong những hệ thống render view

nhanh và dễ dàng Blade cung cấp một hệ thống template mạnh mẽ và dễ sử dụng Hỗ trợviệc thừa kế template (layout) giúp giảm thiểu việc lặp lại mã HTML Blade hỗ trợ cấutrúc điều kiện (@if, @elseif, @else), vòng lặp (@foreach, @for, @while), và các lệnhkhác một cách đơn giản mà không cần sử dụng các cú pháp PHP phức tạp Hỗ trợ dễdàng tạo component tái sử dụng và include các phần của view

Quy trình:

 Người dùng gửi một yêu cầu (request) từ trình duyệt

Controller nhận yêu cầu và gọi Model để lấy dữ liệu.

Sau khi dữ liệu được xử lý trong Model, Controller chọn View thích hợp để hiển thị kết

quả

View gửi phản hồi (response) về cho người dùng.

Ưu điểm:

Separation of concerns (Tách biệt trách nhiệm): Dữ liệu, logic và giao diện được tách

biệt rõ ràng, giúp code dễ bảo trì và phát triển

Dễ mở rộng: Có thể thay đổi một phần (ví dụ: View) mà không ảnh hưởng đến các phần

khác

Nhược điểm:

 Khi ứng dụng lớn, việc quản lý nhiều file Controller, Model và View có thể phức tạp

 Cần phải hiểu rõ cấu trúc MVC để phát triển hiệu quả

9

Trang 10

2.2.2 Singleton Pattern

Singleton Pattern đảm bảo rằng một lớp cụ thể chỉ có một đối tượng (instance) duy

nhất trong suốt vòng đời của ứng dụng Đây là một mẫu thiết kế mà bạn sử dụng khi muốn tránh việc tạo nhiều bản sao của cùng một đối tượng để tiết kiệm tài nguyên hoặc đảm bảo tính nhất quán Nhưng không phải mỗi đối tượng trong Laravel đều cần phải là Singleton Bạn chỉ nên sử dụng Singleton Pattern cho các đối tượng mà bạn muốn giới hạn việc khởi tạo chỉ một lần (ví dụ: kết nối cơ sở dữ liệu, cấu hình hệ thống, hoặc bất kỳ thứ gì chỉ cần khởi tạo một lần để tránh lãng phí tài nguyên) Các lớp khác vẫn có thể được khởi tạo nhiều lần theo nhu cầu Laravel sử dụng Service Container để quản lý các đối tượng và service của bạn, nhưng không phải tất cả đều cần Singleton

Quy trình:

 Khi lớp Singleton được gọi, nó kiểm tra xem phiên bản của lớp đó đã tồn tại chưa

 Nếu chưa, nó tạo ra một phiên bản mới

 Nếu đã tồn tại, nó trả về phiên bản hiện tại

Trang 11

Nhược điểm:

Khó kiểm tra (unit testing): Singleton làm cho việc kiểm thử trở nên khó khăn hơn vì

mọi yêu cầu đều chia sẻ cùng một phiên bản

Tăng độ phức tạp: Việc theo dõi và quản lý trạng thái trong Singleton có thể gây khó

khăn trong các ứng dụng lớn

2.2.3 Repository Pattern

Repository Pattern là một mẫu thiết kế trong lập trình phần mềm nhằm mục đích tách biệt và trừu tượng hóa logic truy cập dữ liệu khỏi ứng dụng Mẫu này thường được sử dụng trong các ứng dụng lớn để làm cho việc quản lý dữ liệu trở nên dễ dàng hơn và cải thiện khả năng bảo trì

mã nguồn

Quy trình:

Controller yêu cầu dữ liệu từ Repository thay vì trực tiếp từ Model.

Repository giao tiếp với Model hoặc các nguồn dữ liệu khác và trả dữ liệu về cho

Controller

Ưu điểm:

Dễ mở rộng và bảo trì: Có thể thay đổi cách dữ liệu được lưu trữ mà không cần thay đổi

code logic nghiệp vụ

Tăng tính tái sử dụng: Repository có thể được sử dụng trong nhiều Controller khác

Trang 12

2.2.4 Dependency Injection Pattern

Dependency là hành vi class A sử dụng các thuộc tính và phương thức của class B ( class A dependency class B ) Ví dụ như bạn có 1 class Student và mỗi Student tham gia và một group nếu làm như bình thường thì sẽ như này

Bài toán đặt ra là nếu có thêm thuộc tính mới trong group và các đối tượng khác tham gia Group thì ta sẽ phải thêm thuộc tính mới vào cho từng hàm tạo của từng đối tượng Dependency Injection là 1 design pattern giúp giải quyết vấn đề này Khi thay đổi trong Class, ta chỉ cần thay đổi 1 chỗ Ý tưởng của nó là tiêm các class dependency từ bên ngoài vào Nó truyền vào mà không phải khởi tạo bên trong các method, constructor Sẽ tránh bị phụ thuộc cứng vào 1 class dependency :

12

Trang 13

Ý tưởng của nó là tiêm các class dependency từ bên ngoài vào Nó truyền vào mà không phải khởi tạo bên trong các method, constructor Sẽ tránh bị phụ thuộc cứng vào 1 class dependency :

13

Trang 14

Dependency class sẽ gây khó khăn cho người mới lập trình nhưng không cần lo lắng khi Inversion of Control ( Service Container ) sẽ quản lý các phụ thuộc cho bạn Hiểu đơn giản là tất cả các dependency của chương trình sẽ được tống vào 1 cái kho gọi là IoC container Bất kỳ khi nào cần dependency class thì chỉ cần lấy từ trong kho đó, kho đó sẽ tự động khởi tạo class dependency Nếu dependency class của bạn cần những dependency khác, nó sẽ có khả năng tự động inject hết cho bạn Với điều kiện các tham số constructor đều phải có type-hint, vì có type-hint nên container mới hiểu được là phải lấy dependency đó

từ đâu Đây là lí do IoC ưu việt hơn Dependency Injection Các framework Spring , Laravel, sử dụng IoC Container Trong Laravel, service Container chính là IoC Container, và nó cũng chính là instance application Ta cũng có thể nói, bản chất instance application laravel của chúng ta là 1 service container khổng lồ.

Đầu tiên các class dependency sẽ được đăng kí trong các Service Provider qua method register Các class dependency sẽ được đưa vào Service Container nhưng các class này chưa được khởi tạo mà chỉ được đăng kí Sau khi đăng kí, bất kỳ khi nào cần dependency class, Service Container sẽ tự động khởi tạo cho chúng ta Kể cả khi các dependency class cũng dependency các class khác thì Service Container cũng sẽ inject hết dựa vào type-hint Các Facades aliases đều chứa method getFacadeAccessor() Method này trả về 1 chuỗi là tên các class dependecy sẽ được đăng kí vào container Đó là lí do vì sao gọi

Facades, Laravel tự động khởi tạo đối tượng

Tách biệt và quản lý phụ thuộc: Giúp dễ dàng quản lý các class và phụ thuộc của

chúng, đồng thời giữ cho code sạch và có cấu trúc

Dễ kiểm thử: Khi bạn sử dụng DI, bạn có thể dễ dàng tạo các đối tượng giả (mock) cho

việc kiểm thử, mà không cần phụ thuộc vào các đối tượng thật

14

Trang 15

Giảm sự phụ thuộc cứng: Thay vì hardcode các phụ thuộc trong class, bạn có thể thay

đổi chúng mà không cần chỉnh sửa code chính

Tăng tính tái sử dụng: Các class có thể được tái sử dụng ở nhiều nơi mà không cần lo

lắng về cách chúng được tạo ra

Nhược điểm:

Phức tạp hơn cho người mới: DI có thể gây khó khăn cho những lập trình viên chưa

quen, vì nó yêu cầu hiểu rõ cách hoạt động của Service Container

Quá nhiều phụ thuộc: Nếu có quá nhiều phụ thuộc được inject vào một class, nó có thể

trở nên phức tạp và khó quản lý

2.2.5 Observer Pattern

Observer Pattern là một mẫu thiết kế hành vi (behavioral design pattern) cho phép một đối

tượng (được gọi là subject) thông báo cho nhiều đối tượng khác (gọi là observers) về sự thay

đổi trạng thái của nó Mẫu này rất hữu ích trong các ứng dụng mà nhiều phần cần được đồng bộ hóa với nhau khi một phần thay đổi Một trong những ứng dụng phổ biến của Observer Pattern làtrong các hệ thống xử lý sự kiện, như trong Laravel

15

Ngày đăng: 16/10/2024, 15:56

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w