web-dev-qa-db-fra.com

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

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 axés 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 à une base de données); et un cadre d’autre part en tant que collection de bibliothèques centrées sur une méthodologie particulière (MVC) et couvrant tous les domaines du développement d’applications.

825
anbanm

En réalité, 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 infrastructures ne sont que des bibliothèques regroupées dans un paquet. Dans le paquet, vous trouverez une bibliothèque dynamique réelle (libWitely.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 cadre ne soit rendu public, il contient généralement les fichiers .h nécessaires à l'utilisation de la bibliothèque.

Ainsi, vous avez tout dans un seul paquet dont vous avez besoin pour utiliser la bibliothèque dans votre application (une bibliothèque C/C++/Objective-C sans fichiers .h est plutôt inutile, à moins que vous ne les écriviez vous-même en fonction de la documentation de la bibliothèque), tas de fichiers à déplacer (un paquet Mac est juste un répertoire au niveau Unix, mais l’interface utilisateur le traite comme un fichier unique, un peu comme si vous aviez des fichiers JAR dans Java et lorsque vous cliquez dessus, vous ne voyez généralement pas ce qu'il y a à l'intérieur, à moins que vous ne choisissiez explicitement d'afficher le contenu).

Wikipedia appelle framework un "mot à la mode". Il définit un cadre logiciel comme

Un framework logiciel est une conception réutilisable pour un système logiciel (ou sous-système). Une infrastructure logicielle peut inclure des programmes de support, des bibliothèques de codes, un langage de script ou tout autre logiciel permettant de développer et de coller les différents composants d’un projet logiciel. Différentes parties du framework peuvent être exposées via une API.

Donc, je dirais qu'une bibliothèque est juste cela, "une bibliothèque". Il s’agit d’un ensemble d’objets/fonctions/méthodes (selon votre langue) et de votre application "crée des liens" 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 à é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 nécessaire à la création de votre application. Cadre est juste un terme très vague.

Voici un article sur un type concernant le sujet " Library vs. Framework ". Personnellement, je pense que cet article est très discutable. Ce n’est pas faux de dire ce qu’il dit ici, cependant, il ne fait que choisir l’une des multiples définitions du cadre et le compare à la définition classique de la 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 pourquoi 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. Comme je le disais plus tôt, c’est une Parole surexcitée. Certaines entreprises publient juste une bibliothèque normale (dans tous les sens d'une bibliothèque classique) et l'appellent un "cadre" car cela semble plus sophistiqué.

336
Mecki

A bibliothèque effectue des opérations spécifiques 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 pièces mais le travail le plus important est effectué par l'application.

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

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

490
Jason Cohen

Je pense que la principale différence est que les frameworks suivent le " principe d'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 journées étant généralement organisées en classes. Chaque appel effectue un 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-classer ou en branchant vos propres classes. Le code de la structure appelle ensuite votre code à ces points.

276
Panos

Vous appelez la bibliothèque.

Framework vous appelle.


書館 助 け
が 痛 い
の 涙

228
Ian Boyd

Bibliothèque:

C'est juste une collection de routines (programmation fonctionnelle) ou 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 les routines définissent normalement des opérations spécifiques dans une zone spécifique à un domaine . Par exemple, certaines bibliothèques de mathématiques peuvent laisser le développeur appeler la fonction sans refaire la mise en oeuvre 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 devrions remplissez 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 si cela convient. L'avantage est que les développeurs n'ont pas à s'inquiéter de savoir si une conception est bonne ou non, mais simplement à implémenter des fonctions spécifiques à un domaine.

Bibliothèque, cadre et représentation de votre image de code:

Library,Framework and your Code image relation

KeyDifference:

La principale différence entre une bibliothèque et un framework est “Inversion of Control” . Lorsque vous appelez une méthode depuis une bibliothèque, vous avez le contrôle. Mais avec un framework, le contrôle est inversé: le framework vous appelle . Source.

Relation:

Tous deux ont défini l'API, qui est utilisée par les programmeurs. Pour les mettre ensemble, nous pouvons considérer une bibliothèque comme une certaine fonction d'une application, un framework comme squelette de l'application et une API est un connecteur permettant de les réunir. Un processus de développement typique commence normalement par une structure et remplit les fonctions définies dans les bibliothèques via l'API.

225
Durai Amuthan.H

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 n’importe quelle petite partie vous aide. Un cadre auquel vous devez vous engager pour l'ensemble de votre projet.

100
James Curran

J'aime répondre à Cohens, mais une définition plus technique est la suivante: Votre code appelle une bibliothèque. n framework appelle votre code. Par exemple, une infrastructure graphique appelle votre code par le biais de gestionnaires d’événements. Une infrastructure Web appelle votre code via un modèle de requête-réponse.

Cela s'appelle également inversion du 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 manière dont vous devez structurer votre code.

42
JacquesB

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 le remplacer par un autre sélecteur de date tel que bootstrap sélecteur de date ou pickadate.

    Si vous n'aimez pas AngularJS sur lequel vous avez construit votre produit, vous ne pouvez pas simplement le remplacer par un autre framework. Vous devez réécrire toute votre base de code.

  2. Généralement, la bibliothèque prend très peu de temps d'apprentissage par rapport à Frameworks. Ex.: Underscore.js est une bibliothèque, Ember.js est un framework.

39
Fizer Khan

J'oublie où j'ai vu cette définition, mais je pense que c'est joli, Nice.

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

30
Moe

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 huile, épices et 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 ont appelé un cadre . Maintenant, vous allez les utiliser un par un ou en combinaison pour faire de votre poisson au curry ce qui est votre produit final . Comparez cela avec un framework web qui est composé de nderscore.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 huile. Vous ne pouvez utiliser aucune huile de votre choix car cela détruirait votre poisson (données). Vous ne pouvez utiliser que huile d'olive. Comparez cela avec nderscore.js. Maintenant, quelle marque d'huile que vous souhaitez utiliser est à vous. Certains plats ont été préparés avec huile d'olive américaine (underscore.js) ou huile d'olive indienne (lodash.js). Cela ne fera que changer le goût de votre application. Comme ils servent à peu près au même but, leur utilisation dépend de la préférence du développeur et ils sont facilement remplaçables.

enter image description here


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

Library: Ensemble d'instructions bien défini fournissant des propriétés et un comportement uniques à vos données. (Huile sur poisson)

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


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

14
Uday Hiwarale

Voici comment j'y pense (et que d'autres ont rationalisé):

Une bibliothèque est quelque chose qui est contenu dans votre code. Et un framework est un conteneur pour votre application.

13
Kon

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

10
Lorenzo Boccaccia

Une bibliothèque implémente une fonctionnalité dans un but limité, tandis qu'un cadre est généralement une collection de bibliothèques prenant en charge un plus grand nombre de fonctionnalités. Par exemple, la bibliothèque System.Drawing.dll gère la fonctionnalité de dessin, mais ne représente qu'une partie du framework .NET global.

7
Jeff Yates

Bibliothèque - Tout ensemble de classes ou de composants pouvant être utilisés à la demande du client pour accomplir une tâche donnée.
Cadre - vous oblige à suivre certaines lignes directrices pour vous "intégrer" à quelque chose de plus grand que vous. Vous fournissez simplement les éléments spécifiques à votre application/vos exigences de la manière requise, afin que "le travail de base puisse vous rendre la vie facile"

6
Gishu

Les bibliothèques sont conçues pour être faciles à utiliser et efficaces. Vous pouvez par exemple dire que la bibliothèque Zend nous aide à accomplir différentes tâches avec ses classes et ses fonctions bien définies. -view-controller) (référence) . C'est un système bien défini pour la distribution des tâches, comme dans MVC. Le modèle contient la base de données, les vues sont pour l'interface utilisateur et les contrôleurs, pour la logique applicative.

6
Ravi shah

Je pense que vous avez assez bien assimilé 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 framework est également supposé ajouter de la cohérence à un ensemble de bibliothèques.

5
PhiLho

Je pense que la bibliothèque est un ensemble d’utilitaires permettant d’atteindre un objectif (sockets, cryptographie, etc.). Le cadre est bibliothèque + RUNTIME EINVIRONNEMENT. Par exemple, ASP.NET est un framework: il accepte les requêtes HTTP, crée un objet de page, appelle des événements lyfe cicle, etc. demande actuelle!

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

5
stefano m

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

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

Ce problème peut être journal ou informations 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 fichier. Modèle de conception .

Vous pouvez avoir un framework ou une bibliothèque pour résoudre tous ces problèmes et bien d’autres encore. Normalement, les frameworks vous aident à résoudre des problèmes plus complexes ou plus importants, mais qu’ils conservent leur principale différence, et non une définition principale. pour les deux.

La principale différence entre une bibliothèque et un framework réside dans la dépendance entre leur propre code. En d'autres termes, pour utiliser un framework, vous devez utiliser presque toutes les classes, modules ou codes du FW, mais pour utiliser une bibliothèque, vous pouvez utiliser une ou plusieurs classes, modules ou codes de la bibliothèque dans votre propre application

Cela signifie que si un Framework a, par exemple, 50 classes afin de l’utiliser dans une application, vous devez utiliser, disons, 10-15 classes ou plus dans votre code, car c’est ainsi que le Framework est conçu, les classes (objets de cette classe) sont des entrées/paramètres pour des méthodes dans d'autres classes du framework. Voir le framework .NET, Spring ou tout framework MVC.

Mais par exemple une bibliothèque de journaux, vous pouvez simplement utiliser une classe de journal dans votre code et vous aider à résoudre le "problème de journalisation", cela ne signifie pas que la bibliothèque de journaux ne possède pas plus de classes dans son code, comme les classes pour manipuler des fichiers, des sorties d'écran, voire des bases de données, mais vous ne touchez/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 and Libraries, mais c'est hors sujet.

5
Junior Garza

Votre interprétation me semble plutôt bonne ... Un bibliothèque pourrait ê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.

D'autre part, un framework devrait disposer d'une gamme d'installations pouvant être utilisées dans certains domaines spécifiques du développement d'applications, comme dans votre exemple, MVC.

4
Adam Bellaire