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.
Réponses:
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
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é.
la source
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.
la source
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 :
la source
Vous appelez Bibliothèque.
Framework vous appelle.
la source
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:
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.
la source
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.
la source
Du point de vue du développeur Web:
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.
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.
la source
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.
la source
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.
la source
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.
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).
la source
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.
la source
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
la source
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.
la source
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 ''
la source
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.
la source
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.
la source
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.
la source
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!
la source
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.
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.
la source