Sự khác biệt giữa framework và library

24935

Bài viết được sự cho phép của tác giả Kien Dang Chung

Trong lập trình ứng dụng nói chung và lập trình web nói riêng, khái niệm framework được nhắc đến rất nhiều bởi nó đang là một xu hướng phát triển các ứng dụng hiện nay. Bạn đã phân biệt Framework và Library khác nhau như thế nào chưa? Nếu bạn có câu trả lời chính xác tức là bạn đã nắm bắt được cách thức xây dựng ứng dụng tiên tiến nhất. Còn nếu chưa, cùng TopDev khám phá ngay dưới bài viết này.

Khái niệm Library

Library (thư viện) trong lập trình là một tập hợp các hàm, phương thức hoặc đoạn mã được xây dựng sẵn, nhằm thực hiện các nhiệm vụ cụ thể và có thể được tái sử dụng trong nhiều ứng dụng khác nhau. Thư viện giúp lập trình viên tiết kiệm thời gian và công sức bằng cách cung cấp các chức năng chung, chẳng hạn như xử lý dữ liệu, quản lý giao diện người dùng, hoặc thao tác với tập tin, mà không cần viết lại mã từ đầu.

Ví dụ:

  • JQuery là một library, nó cung cấp các chức năng giúp chúng ta thao tác với DOM.
  • LinqJS là một library, nó cung cấp các chức năng giúp chúng ta truy vấn (query) dữ liệu dễ dàng, đơn giản và nhanh hơn.

Ưu điểm của Library

  • Tái sử dụng mã: Thư viện cung cấp các hàm và phương thức sẵn có, cho phép lập trình viên tái sử dụng mã trong nhiều dự án khác nhau mà không cần viết lại từ đầu, giúp tiết kiệm thời gian và công sức.
  • Dễ dàng sử dụng: Các thư viện thường được thiết kế với giao diện lập trình dễ hiểu, giúp lập trình viên nhanh chóng tích hợp và sử dụng mà không cần phải tìm hiểu sâu về cách thức hoạt động bên trong.
  • Linh hoạt: Library cung cấp một tập hợp các chức năng mà lập trình viên có thể sử dụng tùy theo nhu cầu. Bạn có quyền kiểm soát khi nào và ở đâu sử dụng các hàm trong thư viện.
  • Tập trung vào nhiệm vụ cụ thể: Thư viện thường tập trung vào giải quyết một số vấn đề nhất định, chẳng hạn như xử lý chuỗi, mảng, yêu cầu HTTP, hoặc thao tác với DOM, giúp giải quyết nhanh chóng những tác vụ đó.
  • Giảm thiểu lỗi lập trình: Việc sử dụng các thư viện đã được kiểm thử và sử dụng rộng rãi sẽ giảm nguy cơ mắc phải những lỗi phổ biến trong lập trình, vì thư viện thường được kiểm tra và tối ưu hóa kỹ lưỡng.

Nhược điểm của Library

  • Phụ thuộc vào thư viện bên ngoài: Khi sử dụng nhiều thư viện, dự án của bạn có thể bị phụ thuộc vào các thư viện đó. Nếu thư viện không được duy trì tốt hoặc không còn được cập nhật, nó có thể gây ra các vấn đề bảo mật hoặc không tương thích với công nghệ mới.
  • Thiếu đồng nhất về cấu trúc: Thư viện không quy định cấu trúc tổng thể của ứng dụng, dẫn đến việc sử dụng quá nhiều thư viện khác nhau có thể làm cho mã nguồn không đồng nhất và khó bảo trì.
  • Hiệu suất: Một số thư viện có thể chứa nhiều tính năng không cần thiết cho ứng dụng của bạn, làm tăng kích thước tệp và có thể ảnh hưởng đến hiệu suất, đặc biệt là trong các ứng dụng web.
  • Cần học cách sử dụng từng thư viện: Mặc dù thư viện giúp giảm khối lượng công việc, nhưng mỗi thư viện đều có cú pháp và cách sử dụng riêng. Lập trình viên phải học cách sử dụng hiệu quả từng thư viện.
  • Khó kiểm soát nội dung bên trong: Vì library thường là mã đóng gói sẵn, bạn không thể dễ dàng điều chỉnh hay thay đổi cách thức hoạt động bên trong nếu thư viện không cung cấp đủ tính năng mà bạn cần.

Nhắc lại khái niệm Framework

Framework là gì? Sự khác biệt giữa framework và library

Framework là một khung làm việc hoặc bộ công cụ giúp lập trình viên phát triển ứng dụng một cách có tổ chức và hiệu quả. Khác với thư viện, framework không chỉ cung cấp các hàm và phương thức mà còn định nghĩa luồng điều khiển và cấu trúc tổng thể của ứng dụng. Khi sử dụng framework, lập trình viên phải tuân theo các quy tắc và cấu trúc mà framework đề ra.

Ví dụ: Angular là một framework. Mục đích Angular framework là giúp cho người dùng xây dựng được các ứng dụng website dạng single page một cách dễ dàng và nhanh chóng. Nó tập trung vào việc phát triển font-end cho ứng dụng web. Angular cung cấp sẵn cho bạn các directives, services, data-biding, filters,… Để sử dụng Angular, chúng ta phải tuân thủ theo mô hình và cách hoạt động của nó. Chẳng hạn, một page sẽ có phần html gọi là template, phần xử lý gọi là controller, các quy định về việc sử dụng $scope, isolate-scope, cách để trao đổi dữ liệu giữa các page như thế nào. Nghĩa là Angular team đã viết sẵn các thư viện ( Libraries ) để bạn sử dụng lại, cùng với một khuôn mẫu (design parttern) mà bạn phải tuân theo nó để có thể xây dựng được ứng dụng.

Lợi ích của việc sử dụng framework

Framework là gì? Sự khác biệt giữa framework và library

Trong mỗi một ngôn ngữ, một lĩnh vực đều có nhiều các framework được tạo ra bởi các nhóm lập trình hoặc thậm chí được hậu thuẫn bởi các công ty lớn, như vậy đương nhiên việc sử dụng lại các framework này có rất nhiều ưu điểm:

  • Framework xây dựng sẵn các tính năng chung, ví dụ dự án web nào cũng có cần có phần quản lý người dùng như đăng ký, đăng nhập, tích hợp mạng xã hội, kết nối cơ sở dữ liệu…
  • Sử dụng framework giảm thiểu tối đa thời gian và công sức phát triển ứng dụng.
  • Cho phép ứng dụng kế thừa một cấu trúc được chuẩn hóa, đảm bảo dễ dàng trong vận hành và bảo trì sau này.

Nhược điểm của Framework

  • Bạn phải mất nhiều thời gian để học và làm chủ một framework.
  • Kích cỡ ứng dụng khi sử dụng framework là rất lớn, một website có thể lên đến hàng vài trăm MB code khi chưa có bất kỳ nội dung nào.
  • Cần viết code tuân thủ theo các tiêu chuẩn chung mà framework đặt ra.
  • Không thích hợp với các ứng dụng quá nhỏ, ví dụ bạn tạo ra một ứng dụng nhỏ hiển thị kết quả World cup 2018 chẳng hạn, việc áp dụng cả một framework vào là không cần thiết, thay vào đó bạn tự viết code sẽ nhanh hơn.

Những điểm khác nhau giữa Framework và Library là gì?

Framework và thư viện có điểm chung là đều là mã code do người khác viết và chúng ta là người sử dụng nó vào project của mình sao cho hợp lí nhất.

Vậy Framework và Library khác nhau như thế nào? Cùng tìm hiểu ngay dưới đây:

  • Framework và Library đều cung cấp các tính năng (functions) được viết sẵn để chúng ta có thể tái sử dụng.
  • Framework lớn hơn và phức tạp hơn Library.
  • Sử dụng Framework bạn phải thay đổi cấu trúc code của dự án (project’s structure) theo các quy tắc của framework đó để có thể sử dụng được các functions mà framework đó cung cấp.
  • Chúng ta có thể sử dụng các functions của Library một cách trực tiếp mà không cần thay đổi cấu trúc code của dự án.
  • Framework có thể hiểu là một khung chương trình, người dùng bổ sung code và tuân theo quy tắc để tạo ra ứng dụng. Còn Library chỉ cung cấp các chức năng tiện ích hay các class để sử dụng trong quá trình xây dựng ứng dụng.
  • Framework hoạt động chủ động. Nghĩa là nó có thể đưa ra các quyết định gọi hoặc bị gọi bởi các Library hay ứng dụng nào đó. Library hoạt động bị động. Nghĩa là nó chỉ được gọi khi nào chúng ta cần dùng nó.

Tới đây, mình nghĩ các  bạn đã hiểu được Framework và Library là gì, chúng khác nhau thế nào rồi đúng không. Để giúp các bạn hiểu rõ hơn, mình lấy một ví dụ đời thực để so sanh Framework với Library thế này:

  • Framework: là mô hình để có một cái máy tính hoạt động được. Nghĩa là, một cái máy tính sử dụng được phải bao gồm: màn hình, CPU, bàn phím, chuột, … Và bạn phải lắp đặt các linh kiện này theo tuần tự và quy tắc như: màn hình phải được gắn vào case CPU qua card đồ họa, bàn phím phải được gắn vào case CPU qua cổng COM/USB,… và bản thân case CPU để nó hoạt động phải có đủ các thành phần: chíp CPU, nguồn, dây điện,… và chúng phải được gắn kết với nhau theo quy tắt và vị trí của nó.
  • Library: có thể xem các cổng COM/USB được chia thành nhiều loại phục vụ cho từng chức năng của nó. Dây điện với các giắc cấm điện (loại 3 đầu, 2 đầu), óc vít dùng để liên kết các thành phần máy tính lại,…

Sự khác biệt giữa framework và library

Một khác biệt nữa trong việc sử dụng framework và library đó là việc gọi các khối mã lệnh (phương thức, hàm), trong framework, các mã lệnh trong framework sẽ gọi đến mã lệnh của bạn, còn với thư viện lập trình thì mã lệnh của bạn gọi đến các mã lệnh của thư viện lập trình. Với library nó giống như mô hình client/server, client sẽ gửi các yêu cầu đến server và server sẽ hồi đáp lại kết quả. Một ví dụ khi sử dụng thư viện lập trình cURL, khi bạn sử dụng một function trong thư viện cURL, code PHP của bạn sẽ gọi đến function này trong thư viện cURL, như vậy code của bạn là chủ thể gọi còn thư viện lập trình là bị động. Khi bạn sử dụng các framework PHP như Laravel chẳng hạn, mối quan hệ này bị đảo ngược, code trong framework gọi đến các mã ứng dụng của bạn với một mẫu thiết kế mà nhiều người biết đến Inversion of Control, nếu bạn đã làm quen với Laravel bạn sẽ thấy mã framework được đưa vào index.php để quản lý luồng điều khiển trong khi các mã chúng ta viết được đưa vào các controller tạo ra các “hành vi” cho ứng dụng.

Khác biệt giữa framework và library

Như vậy có thể nói framework thiên về quản lý luồng điều khiển còn library thiên về tạo hành vi.

Qua bài viết này hi vọng bạn đã nắm được Framework và Library là gì và sự khác nhau giữa Library và Framework. Việc chọn sử dụng framework hay library phụ thuộc vào nhu cầu dự án, mức độ kiểm soát và sự linh hoạt mà bạn cần trong quá trình phát triển ứng dụng.

Nguồn tham khảo: allaravel.com

Xem thêm các việc làm Developer hấp dẫn tại TopDev