Was ist der Unterschied zwischen einem Framework und einer Bibliothek ?
Ich habe mir eine Bibliothek immer als eine Reihe von Objekten und Funktionen vorgestellt, die sich auf die Lösung eines bestimmten Problems oder eines bestimmten Bereichs der Anwendungsentwicklung (dh Datenbankzugriff) konzentrieren. und ein Framework andererseits als eine Sammlung von Bibliotheken, die sich auf eine bestimmte Methodik (dh MVC) konzentrieren und alle Bereiche der Anwendungsentwicklung abdecken.
Antworten:
Tatsächlich können diese Begriffe je nach verwendetem Kontext viele verschiedene Bedeutungen haben.
Unter Mac OS X sind Frameworks beispielsweise nur Bibliotheken, die in einem Bundle zusammengefasst sind. Innerhalb des Bundles finden Sie eine aktuelle dynamische Bibliothek (libWhatever.dylib). Der Unterschied zwischen einer leeren Bibliothek und dem Framework auf dem Mac besteht darin, dass ein Framework mehrere verschiedene Versionen der Bibliothek enthalten kann. Es kann zusätzliche Ressourcen enthalten (Bilder, lokalisierte Zeichenfolgen, XML-Datendateien, UI-Objekte usw.). Sofern das Framework nicht für die Öffentlichkeit freigegeben wird, enthält es normalerweise die erforderlichen .h-Dateien, die Sie zur Verwendung der Bibliothek benötigen.
Somit haben Sie alles in einem einzigen Paket, was Sie benötigen, um die Bibliothek in Ihrer Anwendung zu verwenden (eine C / C ++ / Objective-C-Bibliothek ohne .h-Dateien ist ziemlich nutzlos, es sei denn, Sie schreiben sie selbst gemäß einer Bibliotheksdokumentation), anstatt a Eine Reihe von Dateien, die verschoben werden müssen (ein Mac-Bundle ist nur ein Verzeichnis auf Unix-Ebene, aber die Benutzeroberfläche behandelt es wie eine einzelne Datei, so als hätten Sie JAR-Dateien in Java, und wenn Sie darauf klicken, wird dies normalerweise nicht angezeigt was drin ist, es sei denn, Sie wählen explizit aus, um den Inhalt anzuzeigen).
Wikipedia nennt Framework ein "Schlagwort". Es definiert ein Software-Framework als
Ich würde also sagen, eine Bibliothek ist genau das, "eine Bibliothek". Es ist eine Sammlung von Objekten / Funktionen / Methoden (abhängig von Ihrer Sprache) und Ihre Anwendung "verlinkt" dagegen und kann somit die Objekte / Funktionen / Methoden verwenden. Es handelt sich im Grunde genommen um eine Datei mit wiederverwendbarem Code, die normalerweise von mehreren Anwendungen gemeinsam genutzt werden kann (Sie müssen nicht immer wieder denselben Code schreiben).
Ein Framework kann alles sein, was Sie in der Anwendungsentwicklung verwenden. Dies kann eine Bibliothek, eine Sammlung vieler Bibliotheken, eine Sammlung von Skripten oder eine beliebige Software sein, die Sie zum Erstellen Ihrer Anwendung benötigen. Framework ist nur ein sehr vager Begriff.
Hier ist ein Artikel über jemanden zum Thema " Library vs. Framework ". Ich persönlich halte diesen Artikel für sehr umstritten. Es ist nicht falsch, was er dort sagt, aber er wählt nur eine der vielen Definitionen des Frameworks aus und vergleicht diese mit der klassischen Definition der Bibliothek. Zum Beispiel sagt er, dass Sie einen Rahmen für die Unterklassifizierung benötigen. "Ja wirklich?" Ich kann ein Objekt in einer Bibliothek definieren lassen, es verknüpfen und in meinem Code unterordnen. Ich sehe nicht ein, wie ich dafür einen "Rahmen" brauche. In gewisser Weise erklärt er eher, wie der Begriff Framework heutzutage verwendet wird. Es ist nur ein gehyptes Wort, wie ich schon sagte. Einige Unternehmen veröffentlichen nur eine normale Bibliothek (im Sinne einer klassischen Bibliothek) und nennen sie ein "Framework", weil es ausgefallener klingt.
quelle
Eine Bibliothek führt bestimmte, genau definierte Operationen aus.
Ein Framework ist ein Skelett, bei dem die Anwendung das "Fleisch" der Operation durch Ausfüllen des Skeletts definiert. Das Skelett verfügt weiterhin über Code zum Verknüpfen der Teile, die wichtigste Arbeit wird jedoch von der Anwendung ausgeführt.
Beispiele für Bibliotheken: Netzwerkprotokolle, Komprimierung, Bildmanipulation, Zeichenfolgen-Dienstprogramme, Auswertung regulärer Ausdrücke, Mathematik. Operationen sind in sich geschlossen.
Beispiele für Frameworks: Webanwendungssystem, Plug-in-Manager, GUI-System. Das Framework definiert das Konzept, aber die Anwendung definiert die grundlegenden Funktionen, die Endbenutzer interessieren.
quelle
Ich denke, der Hauptunterschied besteht darin, dass Frameworks dem " Hollywood-Prinzip " folgen , dh "Rufen Sie uns nicht an, wir rufen Sie an".
Laut Martin Fowler :
quelle
Sie rufen Library an.
Framework ruft Sie an.
quelle
Bibliothek:
Es ist nur eine Sammlung von Routinen (funktionale Programmierung) oder Klassendefinitionen (objektorientierte Programmierung). Der Grund dafür ist einfach die Wiederverwendung von Code , dh der Code, der bereits von anderen Entwicklern geschrieben wurde. Die Klassen oder Routinen definieren normalerweise bestimmte Operationen in einem domänenspezifischen Bereich . Zum Beispiel gibt es einige mathematische Bibliotheken, mit denen Entwickler die Funktion einfach aufrufen können, ohne die Implementierung der Funktionsweise eines Algorithmus zu wiederholen.
Rahmen:
Im Framework ist der gesamte Kontrollfluss bereits vorhanden, und es gibt eine Reihe vordefinierter weißer Punkte , die wir mit unserem Code ausfüllen sollten . Ein Framework ist normalerweise komplexer. Es definiert ein Skelett, in dem die Anwendung ihre eigenen Funktionen definiert, um das Skelett auszufüllen. Auf diese Weise wird Ihr Code vom Framework bei Bedarf aufgerufen. Der Vorteil ist, dass Entwickler sich nicht darum kümmern müssen, ob ein Design gut ist oder nicht, sondern nur um die Implementierung domänenspezifischer Funktionen.
Bibliothek, Framework und Ihre Codebilddarstellung:
KeyDifference:
Der Hauptunterschied zwischen einer Bibliothek und einem Framework ist „Inversion of Control“ . Wenn Sie eine Methode aus einer Bibliothek aufrufen, haben Sie die Kontrolle. Bei einem Framework ist die Steuerung jedoch umgekehrt: Das Framework ruft Sie an . Quelle.
Beziehung:
Beide haben eine API definiert, die von Programmierern verwendet wird. Um diese zusammenzustellen, können wir uns eine Bibliothek als eine bestimmte Funktion einer Anwendung vorstellen, ein Framework als Grundgerüst der Anwendung, und eine API ist ein Konnektor, um diese zusammenzustellen. Ein typischer Entwicklungsprozess beginnt normalerweise mit einem Framework und füllt Funktionen aus, die in Bibliotheken über die API definiert sind.
quelle
Wie ich es immer beschrieben habe:
Eine Bibliothek ist ein Werkzeug.
Ein Framework ist eine Lebensweise.
Eine Bibliothek, in der Sie jeden winzigen Teil verwenden können, der Ihnen hilft. Ein Framework, für das Sie Ihr gesamtes Projekt festlegen müssen.
quelle
Aus Sicht der Webentwickler:
Die Bibliothek kann leicht durch eine andere Bibliothek ersetzt werden. Aber Rahmen kann nicht.
Wenn Sie die jquery Date Picker-Bibliothek nicht mögen, können Sie sie durch eine andere Datumsauswahl wie Bootstrap Date Picker oder Pickadate ersetzen.
Wenn Sie AngularJS nicht mögen, auf dem Sie Ihr Produkt aufgebaut haben, können Sie es nicht einfach durch andere Frameworks ersetzen. Sie müssen Ihre gesamte Codebasis neu schreiben.
Meistens benötigt die Bibliothek im Vergleich zu Frameworks weniger Lernaufwand. Beispiel: underscore.js ist eine Bibliothek, Ember.js ist ein Framework.
quelle
Ich mag Cohens Antwort, aber eine technischere Definition ist: Ihr Code ruft eine Bibliothek auf. Ein Framework ruft Ihren Code auf . Beispielsweise ruft ein GUI-Framework Ihren Code über Ereignishandler auf. Ein Webframework ruft Ihren Code über ein Request-Response-Modell auf.
Dies wird auch als Umkehrung der Steuerung bezeichnet. Plötzlich entscheidet das Framework, wann und wie Sie Code ausführen, und nicht umgekehrt wie bei Bibliotheken. Dies bedeutet, dass ein Framework auch einen viel größeren Einfluss darauf hat, wie Sie Ihren Code strukturieren müssen.
quelle
Ich habe vergessen, wo ich diese Definition gesehen habe, aber ich finde sie ziemlich schön.
Eine Bibliothek ist ein Modul, das Sie aus Ihrem Code aufrufen, und ein Framework ist ein Modul, das Ihren Code aufruft.
quelle
Ein Framework kann aus verschiedenen Bibliotheken bestehen. Nehmen wir ein Beispiel.
Angenommen, Sie möchten ein Fischcurry kochen. Dann brauchen Sie Zutaten wie Öl , Gewürze und andere Hilfsmittel . Sie benötigen auch Fisch, auf dem Sie Ihr Gericht zubereiten können (dies sind Daten Ihrer Anwendung). Alle Zutaten zusammen werden als Rahmen bezeichnet . Jetzt werden Sie sie einzeln oder in Kombination verwenden, um Ihr Fischcurry zuzubereiten, das Ihr Endprodukt ist . Vergleichen Sie dies mit einem Webframework, das aus underscore.js , bootstrap.css , bootstrap.js , fontawesome , AngularJS usw. besteht. Ein Beispiel ist Twitter Bootstrap v.35.
Wenn Sie nur eine Zutat in Betracht ziehen, wie zum Beispiel Öl . Sie können kein Öl verwenden, das Sie wollen, da es dann Ihren Fisch ruiniert (Daten). Sie können nur Olivenöl verwenden . Vergleichen Sie das mit underscore.js . Nun liegt es an Ihnen, welche Ölmarke Sie verwenden möchten. Einige Gerichte wurden mit amerikanischem Olivenöl (underscore.js) oder indischem Olivenöl (lodash.js) zubereitet. Dies ändert nur den Geschmack Ihrer Anwendung. Da sie fast dem gleichen Zweck dienen, hängt ihre Verwendung von den Vorlieben des Entwicklers ab und sie sind leicht austauschbar.
PS AngularJS ist ein MVC-Framework, aber eine JavaScript-Bibliothek. Weil ich glaube, dass Library das Standardverhalten der nativen Technologie (in diesem Fall JavaScript) erweitert.
quelle
So denke ich darüber (und habe es von anderen rationalisiert gesehen):
Eine Bibliothek ist etwas, das in Ihrem Code enthalten ist. Und ein Framework ist ein Container für Ihre Anwendung.
quelle
Hier ist ein bitterer Artikel von Joel Spolsky verlinkt , der jedoch eine gute Unterscheidung zwischen Toolboxen, Bibliotheken, Frameworks und dergleichen enthält
quelle
Eine Bibliothek implementiert Funktionen für einen eng begrenzten Zweck, während ein Framework in der Regel eine Sammlung von Bibliotheken ist, die Unterstützung für ein breiteres Spektrum von Funktionen bieten. Beispielsweise behandelt die Bibliothek System.Drawing.dll die Zeichenfunktionen, ist jedoch nur ein Teil des gesamten .NET-Frameworks.
quelle
Bibliothek - Alle Klassen oder Komponenten, die nach Ansicht des Clients zur Erfüllung einer bestimmten Aufgabe verwendet werden können.
Framework - schreibt bestimmte Richtlinien vor, damit Sie sich in etwas Größeres als Sie "einstecken" können. Sie stellen lediglich die Teile, die für Ihre Anwendung / Anforderungen spezifisch sind, in einer veröffentlichten, erforderlichen Weise zur Verfügung, damit "das Rahmenwerk Ihnen das Leben leichter machen kann".
quelle
Bibliotheken dienen der Benutzerfreundlichkeit und Effizienz. Sie können beispielsweise sagen, dass die Zend-Bibliothek uns mit ihren genau definierten Klassen und Funktionen hilft, verschiedene Aufgaben zu erledigen. Während ein Framework normalerweise eine bestimmte Art der Implementierung einer Lösung wie MVC (Model) erzwingt -view-controller) (Referenz) . Es ist ein genau definiertes System für die Verteilung von Aufgaben wie in MVC.Model enthält die Datenbankseite, Ansichten sind für die Benutzeroberfläche und Controller sind für die Geschäftslogik.
quelle
Ihre Interpretation klingt für mich ziemlich gut ... Eine Bibliothek kann alles sein, was für die Wiederverwendung in anderem Code kompiliert und in sich geschlossen ist. Der Inhalt ist buchstäblich nicht eingeschränkt.
Ein Rahmen auf der anderen Seite wird erwartet , dass eine Reihe von Einrichtungen für den Einsatz in einer spezifischen Arena der Anwendungsentwicklung haben, wie Ihr Beispiel MVC.
quelle
Ich denke, Sie haben den Unterschied ziemlich gut festgehalten: Das Framework bietet einen Rahmen, in dem wir unsere Arbeit erledigen ... Irgendwie ist es "einschränkender" als eine einfache Bibliothek.
Das Framework soll auch einer Reihe von Bibliotheken Konsistenz verleihen.
quelle
Ich denke, Bibliothek ist eine Reihe von Dienstprogrammen, um ein Ziel zu erreichen (z. B. Sockets, Kryptografie usw.). Framework ist Bibliothek + RUNTIME EINVIRONNEMENT. Zum Beispiel ist ASP.NET ein Framework: Es akzeptiert HTTP-Anforderungen, erstellt Seitenobjekte, ruft Lyfe-Cicle-Ereignisse auf usw. Framework erledigt all dies. Sie schreiben ein Stück Code, das zu einem bestimmten Zeitpunkt des Lebenszyklus von ausgeführt wird aktuelle Anfrage!
Wie auch immer, sehr interessante Frage!
quelle
Ich erinnere mich nicht an die Quelle dieser Antwort (ich glaube, ich habe sie in einer PPT im Internet gefunden), aber die Antwort ist recht einfach.
Eine Bibliothek und ein Framework sind eine Reihe von Klassen, Modulen und / oder Code (abhängig von der Programmiersprache), die in Ihren Anwendungen verwendet werden können und Ihnen bei der Lösung eines bestimmten "Problems" helfen.
Dieses Problem kann das Protokollieren oder Debuggen von Informationen in einer Anwendung, das Zeichnen von Diagrammen, das Erstellen eines bestimmten Dateiformats (HTML, PDF, XLS), das Herstellen einer Verbindung zu einer Datenbank, das Erstellen eines Teils einer Anwendung oder einer vollständigen Anwendung oder eines auf eine Anwendung angewendeten Codes sein Entwurfsmuster .
Sie können ein Framework oder eine Bibliothek haben, um all diese und viele weitere Probleme zu lösen. Normalerweise helfen Ihnen die Frameworks dabei, komplexere oder größere Probleme zu lösen, aber dass eine Folge ihrer Hauptunterschiede keine Hauptdefinition für beide ist.
Dies bedeutet, dass, wenn ein Framework beispielsweise 50 Klassen hat, um das Framework in einer App zu verwenden, Sie 10-15 oder mehr Klassen in Ihrem Code verwenden müssen, da auf diese Weise ein Framework entworfen wird, einige Klassen (Objekte dieser Klassen) sind Eingaben / Parameter für Methoden in anderen Klassen im Framework. Siehe .NET Framework, Spring oder ein beliebiges MVC-Framework.
Aber zum Beispiel eine Protokollbibliothek, Sie können einfach eine Protokollklasse in Ihrem Code verwenden und helfen Ihnen, das "Protokollierungsproblem" zu lösen. Das bedeutet nicht, dass die Protokollbibliothek nicht mehr Klassen in seinem Code hat, wie Klassen Sie können Dateien, Bildschirmausgaben oder sogar Datenbanken verarbeiten, aber Sie berühren / verwenden diese Klassen niemals in Ihrem Code. Dies ist der Grund, warum es sich um eine Bibliothek und nicht um ein Framework handelt.
Außerdem gibt es mehr Kategorien als Frameworks und Bibliotheken, aber das ist kein Thema.
quelle