Quelle est la différence entre un framework et une bibliothèque?

865

Quelle est la différence entre un framework et une bibliothèque ?

J'ai toujours pensé à une bibliothèque comme un ensemble d'objets et de fonctions qui se concentre sur la résolution d'un problème particulier ou d'un domaine spécifique du développement d'applications (c'est-à-dire l'accès aux bases de données); et un cadre, d'autre part, comme une collection de bibliothèques centrées sur une méthodologie particulière (c'est-à-dire MVC) et qui couvre tous les domaines du développement d'applications.

anbanm
la source
18
@ vba4all: Comment cela peut-il être un doublon quand il a été demandé en premier?
Noob Saibot
5
Ce n'est pas parce qu'il a été créé en premier qu'il ne s'agit pas d'un doublon;) il s'agit simplement d'identifier les questions en double / très similaires et de s'assurer que les ressources / réponses sont partagées (et que la question la plus active / la mieux répondue est ouverte)
GrayedFox
2
Duplicata possible entre Framework vs Toolkit et Library
emlai
3
@tuple_cat en fait votre lien semble être le doublon: il a été demandé après celui-ci
chharvey
1
Nous avons besoin de certaines fonctionnalités, nous appelons Library. Nous avons besoin de certaines fonctionnalités, nous prendrons l'aide de framework et Framework appelle notre code (par exemple UIKit).
Kamleshwar

Réponses:

350

En fait, ces termes peuvent signifier beaucoup de choses différentes selon le contexte dans lequel ils sont utilisés.

Par exemple, sur Mac OS X, les frameworks ne sont que des bibliothèques, regroupées dans un bundle. Dans le bundle, vous trouverez une bibliothèque dynamique réelle (libWwhat.dylib). La différence entre une bibliothèque nue et le framework sur Mac est qu'un framework peut contenir plusieurs versions différentes de la bibliothèque. Il peut contenir des ressources supplémentaires (images, chaînes localisées, fichiers de données XML, objets d'interface utilisateur, etc.) et à moins que le framework ne soit rendu public, il contient généralement les fichiers .h nécessaires dont vous avez besoin pour utiliser la bibliothèque.

Ainsi, vous avez tout dans un seul package dont vous avez besoin pour utiliser la bibliothèque dans votre application (une bibliothèque C / C ++ / Objective-C sans fichiers .h est assez inutile, sauf si vous les écrivez vous-même selon la documentation de la bibliothèque), au lieu d'un tas de fichiers à déplacer (un bundle Mac n'est qu'un répertoire au niveau Unix, mais l'interface utilisateur le traite comme un fichier unique, à peu près comme si vous avez des fichiers JAR en Java et lorsque vous cliquez dessus, vous ne voyez généralement pas ce qui est à l'intérieur, sauf si vous choisissez explicitement d'afficher le contenu).

Wikipédia appelle framework un «mot à la mode». Il définit un cadre logiciel comme

Un cadre logiciel est une conception réutilisable pour un système logiciel (ou sous-système). Un cadre logiciel peut comprendre des programmes de support, des bibliothèques de code, un langage de script ou d'autres logiciels pour aider à développer et à coller ensemble les différents composants d'un projet logiciel. Différentes parties du framework peuvent être exposées via une API.

Je dirais donc qu'une bibliothèque n'est que cela, "une bibliothèque". Il s'agit d'un ensemble d'objets / fonctions / méthodes (selon votre langue) et votre application "se lie" avec lui et peut donc utiliser les objets / fonctions / méthodes. Il s'agit essentiellement d'un fichier contenant du code réutilisable qui peut généralement être partagé entre plusieurs applications (vous n'avez pas besoin d'écrire le même code encore et encore).

Un framework peut être tout ce que vous utilisez dans le développement d'applications. Il peut s'agir d'une bibliothèque, d'une collection de nombreuses bibliothèques, d'une collection de scripts ou de tout logiciel dont vous avez besoin pour créer votre application. Le cadre n'est qu'un terme très vague.

Voici un article sur un type concernant le sujet " Bibliothèque vs. Framework ". Je pense personnellement que cet article est hautement défendable. Ce n'est pas faux ce qu'il dit là-bas, cependant, il choisit simplement l'une des multiples définitions de framework et la compare à la définition classique de bibliothèque. Par exemple, il dit que vous avez besoin d'un cadre pour la sous-classification. Vraiment? Je peux avoir un objet défini dans une bibliothèque, je peux le lier et le sous-classer dans mon code. Je ne vois pas comment j'ai besoin d'un "cadre" pour cela. D'une certaine manière, il explique plutôt comment le terme cadre est utilisé de nos jours. C'est juste un mot excité, comme je l'ai déjà dit. Certaines sociétés ne publient qu'une bibliothèque normale (dans tous les sens d'une bibliothèque classique) et l'appellent un "framework" car cela semble plus sophistiqué.

Mecki
la source
2
Il est intéressant de noter qu'en 2008, l'article de Wikipedia décrivait le «cadre» comme un «mot à la mode».
Poisson zèbre
2
OMI, un cadre est l'environnement de projet "vierge".
Kulvar
514

Une bibliothèque effectue des opérations spécifiques et bien définies.

Un framework est un squelette où l'application définit la "viande" de l'opération en remplissant le squelette. Le squelette a encore du code pour relier les parties mais le travail le plus important est fait par l'application.

Exemples de bibliothèques: protocoles réseau, compression, manipulation d'images, utilitaires de chaîne, évaluation des expressions régulières, mathématiques. Les opérations sont autonomes.

Exemples de frameworks: système d'application Web, gestionnaire de plug-ins, système GUI. Le cadre définit le concept mais l'application définit les fonctionnalités fondamentales qui intéressent les utilisateurs finaux.

Jason Cohen
la source
10
+1 pour des exemples réels. Btw, voulez-vous clarifier ce que vous entendez par "système d'application web"?
Pacerier
3
@Pacerier est probablement quelque chose qui vous permet de créer une application Web complète, comme Rails for Ruby ou Sails for Node.js.
gustavohenke
Bonne réponse. Pouvez-vous donner quelques exemples supplémentaires liés aux frameworks et bibliothèques iOS?
NSPratik
ou Django, le framework web des perfectionnistes avec des délais.
frappe aérienne
2
Je penserais à remplir le squelette de «muscles» plutôt que de «viande». Je pense que c'est une analogie plus précise parce que les «muscles» mettent le squelette en mouvement.
altgov3en
290

Je pense que la principale différence est que les frameworks suivent le " principe Hollywood ", c'est-à-dire "ne nous appelez pas, nous vous appellerons".

Selon Martin Fowler :

Une bibliothèque est essentiellement un ensemble de fonctions que vous pouvez appeler, ces jours-ci généralement organisés en classes. Chaque appel fait du travail et rend le contrôle au client.

Un framework incarne une conception abstraite, avec plus de comportement intégré. Pour l'utiliser, vous devez insérer votre comportement à différents endroits du framework soit en sous-classant, soit en branchant vos propres classes. Le code du framework appelle ensuite votre code à ces points.

Panos
la source
2
@Panos Merci pour l'explication, mais pouvez-vous élaborer. Par exemple, j'utilise le framework FacebookSDK et j'appelle des méthodes de classe à partir de ce framework. Le framework FacebookSDK n'appelle rien dans mon code, ce qui est l'opposé de votre définition, c'est-à-dire "ne nous appelez pas, nous vous appellerons".
Charles Robertson
4
@CharlesRobertson AFAIK FacebookSDK est une bibliothèque cliente. Il ne peut pas être classé comme un framework et la raison est évidente (comme vous l'avez déjà remarqué): le FacebookSDK n'appelle rien dans le code client. De plus, Facebook définit le SDK comme suit: "Un ensemble complet de fonctionnalités côté client pour ajouter des plugins sociaux, des connexions Facebook et des appels API Graph." Aucune indication pour le cadre ...
Panos
1
@Panos Merci. Je suppose que l'icône de valise qui représente le FacebookSDK est alors un peu trompeuse. Et le nom «FacebookSDK.framework». Facebook devrait le renommer en quelque chose comme «FacebookSDK.dylib»? Mais merci d'avoir clarifié cela. Il est bon de savoir quelle est la bonne définition ...
Charles Robertson
Voilà une définition intéressante. J'ai récemment commencé à utiliser d3.js et j'ai observé qu'il est généralement considéré comme un cadre. Mais quel que soit le code d3 que j'ai écrit se trouve dans un code javascript habituel, je ne peux donc pas étendre cette définition à d3.
Dileep Kumar Patchigolla
1
@Dileep La page d'accueil d3.js indique dans la première phrase: "D3.js est une bibliothèque JavaScript pour manipuler des documents basés sur des données". Je pense qu'il est faux d'être considéré comme un cadre.
Panos
243

Vous appelez Bibliothèque.

Framework vous appelle.


図 書館 助 け
足 場 が 痛 い
多 く の 涙

Ian Boyd
la source
12
Pourriez-vous refactoriser cela comme un haïku?
Derek Tomes
18
@DerekTomes BTW: j'ai ajouté une forme de haïku .
Ian Boyd
56
Votre réponse est en cours de discussion dans META . Souhaitez-vous traduire le haïku? Je pense que beaucoup d'entre nous se demandent si cela signifie vraiment aider la bibliothèque, les échafaudages font mal, beaucoup de larmes, comme le dit très bien le traducteur Google :)
Bugs
27
C'est bien de voir qu'un mod a annulé les deux premiers commentaires. Maintenant, il est logique pourquoi le texte japonais a été ajouté (il a été demandé comme une plaisanterie) et qu'il s'agissait simplement d'une tentative de traduction, et non d'un vrai poème japonais populaire.
Zanon
9
En Russie soviétique, le cadre vous appelle.
Robert Moore
242

Bibliothèque:

Il s'agit simplement d'une collection de routines (programmation fonctionnelle) ou de définitions de classe (programmation orientée objet). La raison derrière est simplement la réutilisation du code , c'est-à-dire obtenir le code qui a déjà été écrit par d'autres développeurs. Les classes ou routines définissent normalement des opérations spécifiques dans une zone spécifique au domaine . Par exemple, il existe des bibliothèques de mathématiques qui permettent au développeur d'appeler simplement la fonction sans refaire l'implémentation du fonctionnement d'un algorithme.

Cadre:

Dans le cadre, tout le flux de contrôle est déjà là, et il y a un tas de points blancs prédéfinis que nous devons remplir avec notre code . Un cadre est normalement plus complexe. Il définit un squelette où l'application définit ses propres fonctionnalités pour remplir le squelette. De cette façon, votre code sera appelé par le framework de manière appropriée. L'avantage est que les développeurs n'ont pas à se soucier de savoir si une conception est bonne ou non, mais simplement à implémenter des fonctions spécifiques au domaine.

Bibliothèque, Framework et votre représentation d'image de code:

Bibliothèque, Framework et votre relation d'image de code

Différence clé:

La principale différence entre une bibliothèque et un framework est «l'inversion du contrôle» . Lorsque vous appelez une méthode à partir d'une bibliothèque, vous avez le contrôle. Mais avec un framework, le contrôle est inversé: le framework vous appelle . La source.

Relation:

Les deux ont défini l'API, qui est utilisée par les programmeurs. Pour les mettre ensemble, nous pouvons penser à une bibliothèque comme une certaine fonction d'une application, un cadre comme le squelette de l'application, et une API est un connecteur pour les assembler. Un processus de développement typique commence normalement par un framework et remplit les fonctions définies dans les bibliothèques via l'API.

Durai Amuthan.H
la source
14
Inversion de contrôle Excellente explication en profondeur!
Patricia
3
Comme l'image, résume bien et montre également pourquoi les gens sont parfois confus, car les cadres regroupent souvent des bibliothèques.
Didier A.
1
@didibus Si vous pensez que la réponse donne une bonne explication, vous pouvez voter pour la réponse afin que les téléspectateurs puissent facilement trouver la réponse fructueuse.
Durai Amuthan.H
Donc FFmpeg (pas le programme, mais principalement LibAVUtil du projet) est un framework, et libavcodec, etc. sont des bibliothèques?
MarcusJ
1
@MarcusJ - LibAVUtil et libavcodec sont des bibliothèques
Durai Amuthan.H
110

Comme je l'ai toujours décrit:

Une bibliothèque est un outil.

Un cadre est un mode de vie.

Une bibliothèque que vous pouvez utiliser pour vous aider. Un Framework dans lequel vous devez valider l'ensemble de votre projet.

James Curran
la source
9
Cette réponse est beaucoup plus logique après avoir complètement compris les deux termes.
un autre
45

Du point de vue du développeur Web:

  1. La bibliothèque peut être facilement remplacée par une autre bibliothèque. Mais le cadre ne peut pas.

    Si vous n'aimez pas la bibliothèque de sélecteur de date jquery, vous pouvez la remplacer par un autre sélecteur de date tel que le sélecteur de date bootstrap ou pickadate.

    Si vous n'aimez pas AngularJS sur lequel vous avez construit votre produit, vous ne pouvez pas simplement le remplacer par d'autres cadres. Vous devez réécrire l'intégralité de votre base de code.

  2. Généralement, la bibliothèque prend une courbe d'apprentissage très inférieure à celle des Frameworks. Par exemple: underscore.js est une bibliothèque, Ember.js est un framework.

Fizer Khan
la source
Meilleure réponse. Simple, direct et clair.
Felipe Santiago
41

J'aime la réponse de Cohens, mais une définition plus technique est: Votre code appelle une bibliothèque. Un framework appelle votre code . Par exemple, une infrastructure GUI appelle votre code via des gestionnaires d'événements. Un framework Web appelle votre code via un modèle de requête-réponse.

Ceci est également appelé inversion de contrôle - du coup, le framework décide quand et comment exécuter votre code plutôt que l'inverse comme avec les bibliothèques. Cela signifie qu'un framework a également un impact beaucoup plus important sur la façon dont vous devez structurer votre code.

JacquesB
la source
30

J'oublie où j'ai vu cette définition, mais je pense que c'est plutôt sympa.

Une bibliothèque est un module que vous appelez à partir de votre code, et un framework est un module qui appelle votre code.

Moe
la source
6
Mais libc inclut qsort (), qui appelle votre code. Je ne pense pas que cela fasse de libc un framework.
Mark Baker,
Qu'entend-on par module?
NattyC
18

Un cadre peut être constitué de différentes bibliothèques. Prenons un exemple.

Disons que vous voulez faire cuire un poisson au curry. Ensuite, vous avez besoin d'ingrédients comme l' huile , les épices et d'autres services publics . Vous avez également besoin de poisson qui est votre base pour préparer votre plat (ce sont les données de votre application). tous les ingrédients ensemble appelés un cadre . Maintenant, vous allez les utiliser un par un ou en combinaison pour faire votre curry de poisson qui est votre produit final . Comparez cela avec un framework web qui est fait de underscore.js , bootstrap.css , bootstrap.js , fontawesome , AngularJS etc. Pour un exemple, Twitter Bootstrap v.35.

Maintenant, si vous ne considérez qu'un seul ingrédient, comme par exemple l' huile . Vous ne pouvez pas utiliser l'huile que vous voulez, car cela ruinerait votre poisson (données). Vous ne pouvez utiliser que de l' huile d'olive . Comparez cela avec underscore.js . Maintenant, quelle marque d'huile vous souhaitez utiliser dépend de vous. Certains plats ont été préparés avec de l'huile d'olive américaine (underscore.js) ou de l'huile d'olive indienne (lodash.js). Cela ne fera que changer le goût de votre application. Puisqu'ils servent presque le même objectif, leur utilisation dépend de la préférence du développeur et ils sont facilement remplaçables.

entrez la description de l'image ici


Framework : une collection de bibliothèques qui fournissent des propriétés et un comportement uniques à votre application. (Tous les ingrédients)

Bibliothèque : un ensemble d'instructions bien défini qui fournit des propriétés et un comportement uniques à vos données. (Huile sur poisson)

Plugin : Un utilitaire pour une bibliothèque (ui-router -> AngularJS) ou plusieurs bibliothèques en combinaison (date-picker -> bootstrap.css + jQuery) sans lequel votre plugin pourrait maintenant fonctionner comme prévu.


PS AngularJS est un framework MVC mais une bibliothèque JavaScript. Parce que je crois que Library étend le comportement par défaut de la technologie native (JavaScript dans ce cas).

Uday Hiwarale
la source
Belle explication :)
Mano
14

Voici comment j'y pense (et que j'ai vu rationalisé par d'autres):

Une bibliothèque est un élément contenu dans votre code. Et un framework est un conteneur pour votre application.

Kon
la source
10

ici est lié un article amer de Joel Spolsky , mais contient une bonne distinction entre les boîtes à outils, les bibliothèques, les cadres et autres

Lorenzo Boccaccia
la source
8

Une bibliothèque implémente des fonctionnalités dans un but à portée étroite tandis qu'un cadre tend à être une collection de bibliothèques prenant en charge un plus large éventail de fonctionnalités. Par exemple, la bibliothèque System.Drawing.dll gère la fonctionnalité de dessin, mais n'est qu'une partie du cadre global .NET.

Jeff Yates
la source
3
Bon point, qu'un framework peut contenir des bibliothèques . Il peut donc s'agir à la fois d'un framework dans le premier et d'une bibliothèque dans le second. Comme c'est le cas pour de nombreux frameworks Web comme Apache Wicket , qui définissent le cycle de traitement mais fournissent également un grand ensemble de classes qui implémentent des composants d'interface utilisateur concrets.
OneWorld
Je crois que .NET est une très grande bibliothèque. Une bibliothèque trop grande pour être appelée bibliothèque, mais toujours une bibliothèque. Frameworks applique une certaine conception, décide du flux de contrôle, etc. avec peu de place pour bricoler. .NET en tant que tel ne fait pas cela. Je crois que .NET est une bibliothèque tandis qu'ASP.NET MVC est un framework. Mais MS a besoin de bons mots pour commercialiser.
nawfal
6

Bibliothèque - Tout ensemble de classes ou de composants qui peut être utilisé comme le client le juge approprié pour accomplir une certaine tâche.
Framework - impose certaines directives pour que vous puissiez vous «brancher» sur quelque chose de plus grand que vous. Vous fournissez simplement les pièces spécifiques à votre application / exigences de manière publiée et obligatoire, de sorte que `` la charpente puisse vous faciliter la vie ''

Gishu
la source
6

Les bibliothèques sont pour la facilité d'utilisation et l'efficacité.Vous pouvez dire par exemple que la bibliothèque Zend nous aide à accomplir différentes tâches avec ses classes et fonctions bien définies.Bien qu'un framework soit quelque chose qui force généralement une certaine manière d'implémenter une solution, comme MVC (Model -view-controller) (référence) . Il s'agit d'un système bien défini pour la distribution des tâches comme dans MVC.Model contient le côté base de données, les vues sont pour l'interface utilisateur et les contrôleurs sont pour la logique métier.

Ravi shah
la source
5

Votre interprétation me semble plutôt bonne ... Une bibliothèque peut être tout ce qui est compilé et autonome pour être réutilisé dans un autre code, il n'y a littéralement aucune restriction sur son contenu.

Un framework , d'autre part, devrait avoir une gamme d'installations à utiliser dans un domaine spécifique du développement d'applications, tout comme votre exemple, MVC.

Adam Bellaire
la source
5

Je pense que vous avez bien compris la différence: le cadre fournit un cadre dans lequel nous faisons notre travail ... D'une certaine manière, il est plus "contraignant" qu'une simple bibliothèque.
Le cadre est également censé ajouter de la cohérence à un ensemble de bibliothèques.

PhiLho
la source
5

Je pense que la bibliothèque est un ensemble d'utilitaires pour atteindre un objectif (par exemple, les sockets, la cryptographie, etc.). Le framework est bibliothèque + RUNTIME EINVIRONNEMENT. Par exemple, ASP.NET est un framework: il accepte les requêtes HTTP, crée un objet page, appelle des événements lyfe cicle, etc. Framework fait tout cela, vous écrivez un peu de code qui sera exécuté à un moment précis du cycle de vie de demande actuelle!

Quoi qu'il en soit, question très intéressante!

stefano m
la source
5

Je ne me souviens pas de la source de cette réponse (je suppose que je l'ai trouvée dans un .ppt sur Internet), mais la réponse est assez simple.

Une bibliothèque et un framework sont un ensemble de classes, de modules et / ou de code (selon le langage de programmation) qui peuvent être utilisés dans vos applications et vous aident à résoudre un "problème" spécifique.

Ce problème peut être des informations de journal ou de débogage dans une application, dessiner des graphiques, créer un format de fichier spécifique (html, pdf, xls), se connecter à une base de données, créer une partie d'une application ou une application complète ou un code appliqué à un Modèle de conception .

Vous pouvez avoir un framework ou une bibliothèque pour résoudre tous ces problèmes et bien d'autres, normalement les frameworks vous aident à résoudre des problèmes plus complexes ou plus gros, mais c'est une consécuence de leur principale différence, pas une définition principale pour les deux.

La principale différence entre une bibliothèque et un Framework est la dépendance entre leur propre code, en d'autres termes, pour utiliser un Framework, vous devez utiliser presque toutes les classes, modules ou code du FW, mais pour utiliser une Library, vous pouvez en utiliser un ou quelques classes, modules ou code dans la lib dans votre propre application

Cela signifie que si un Framework a, par exemple, 50 classes pour utiliser le framework dans une application, vous devez utiliser, disons, 10-15 classes ou plus dans votre code, parce que c'est ainsi que l'on conçoit un Framework, certains Les classes (objets de ces classes) sont des entrées / paramètres pour les méthodes d'autres classes du framework. Voir le framework .NET, Spring ou n'importe quel framework MVC.

Mais par exemple une bibliothèque de journaux, vous pouvez simplement utiliser une classe Log dans votre code, et vous aide à résoudre le "problème de journalisation", cela ne signifie pas que la bibliothèque de journaux n'a pas plus de classes dans son code, comme les classes pour gérer des fichiers, gérer des sorties d'écran ou même des bases de données, mais vous ne touchez / n'utilisez jamais ces classes dans votre code, et c'est la raison pour laquelle il s'agit d'une bibliothèque et non d'un framework.

Et il y a aussi plus de catégories que Frameworks et bibliothèques, mais c'est hors sujet.

Junior Garza
la source