Was ist der Unterschied von Frameworks und Bibliotheken?

4 Antworten

Ein JS Framework beschreibt eine gegebene Struktur - "wie" du deinen Code praesentieren sollst. Ziemlich aehnlich wie eine Code-Vorlage, zusammen mit einigen Helfern, Konstruktoren usw., um ein spezifisches Problem zu lösen / zu vereinfachen oder die Architektur in Ordnung zu bringen. Z.B. "Backbone" oder "requireJS".

Bibliothek: Ist ein komplettes Toolkit, das verschiedene Ebenen stark abstrahiert, wie zB Browser / DOM-Modelle / etc. Ein gutes Toolkit bietet es eine Menge Werkzeuge und nette Sachen zum Arbeiten, die die Programmierung erleichtern. Z.B. "jQuery" oder "MooTools".

Eine Bibliothek stellt spezifische Operationen zur Verfügung, die nach Verarbeitung ihrer Aufgabe den Programmfluss zurück an den Aufrufer geben.

Ein Framework hingegen stellt, wie es der Name schon sagt, einen Rahmen bzw. ein abstraktes Gerüst zu Verfügung, in welchem die Applikation selbst eingebettet wird und erst die konkrete Aufgabe beschreibt. So könntest du bestimmte Klassen des Frameworks bspw. erweitern und das Framework würde diese später aufrufen.

Man kann daher sagen, dass ein Kernunterschied darin liegt, dass du mit deiner Applikation Funktionen einer Bibliothek aufrufst, dass Framework hingegen Funktionen/Schnittstellen deiner Anwendung.

Kurze Antwort

Ein Framework ist ein selbstständig lauffähiger Rahmen, der deinen Code aufruft. Eine Bibliothek ist eine selbstständig nicht lauffähige Sammlung von Hilfsmodulen, die Lösungen für thematisch zusammengehörende Problemstellungen anbieten und von deinem Code aufgerufen werden. Der Hauptunterschied ist also, wer die Kontrolle hat.

Lange Antwort

Ein Framework ist ein Rahmen bzw. eine unterstützende Struktur, innerhalb der du deine Anwendung entwickelst. Sozusagen ein unfertiges Programm, welches lediglich das Fundament deiner Applikation ist, aber theoretisch auch selbstständig lauffähig wäre. Du kannst deinen Code damit verknüpfen, damit er vom Framework aufgerufen wird, denn die Hauptfunktion liegt im Framework. Somit stellt dein Code eine Art benutzerdefinierte Anpassung des Frameworks an deine Bedürfnisse dar.

Ein Framework stellt häufig verwendete, gemeinsame Strukturen und Muster zur Verfügung, sodass nicht jeder alles von Grund auf entwickeln muss, sondern diese Strukturen nutzen kann, die immer wieder in zahlreichen Programmen verwendet werden. Ein Framework bietet außerdem einheitliche Schnittstellen zu bestimmten Quellen, z.B. zu Datenbanken. Dadurch lässt sich eine Quelle einfacher ansprechen. Somit sorgt ein Framework dafür, dass du dich auf den Kern deines Programmes konzentrieren kannst und dich vermindert mit dem Design der Software beschäftigen musst.

Eine Bibliothek ist dagegen eine thematisch zusammenhängende Sammlung von Hilfsmodulen für bestimmte Problemstellungen, die für sich nicht lauffähig ist. Die Hauptfunktion liegt in deinem Code und dessen Aufgabe ist es auch, die angebotenen Tools der Bibliothek aufzurufen. Die Bibliothek kann bestimmte Aufgaben erfüllen, was bereits ein anderer Entwickler implementiert hat. Sie spart dir Entwicklungsarbeit, weil du "das Rad nicht neu erfinden" musst. Diese Aufgaben erfüllt die Bibliothek aber nicht selbstständig, wie es ein Framework tut, sondern erst dann, wenn du in deinem Code dafür sorgst.

Du kannst natürlich auch ein Framework nutzen und in deinem Code trotzdem Bibliotheken einbinden. Beides ist gleichzeitig einsetzbar und schließt sich nicht gegenseitig aus.

TL; DR

Der Hauptunterschied ist also, wer die Kontrolle hat (Inversion of Control). Wie man auf Englisch so schön sagt:

You call library. A framework calls you.

Bild zum Beitrag

 - (programmieren, HTML, CSS)

Das Verhältnis zwischen Framework und Bibliothek ist eine Teilmengenbeziehung. Alle Frameworks sind Bibliotheken, aber nicht alle Bibliotheken sind Frameworks.

Ein Framework hat eine zusätzliche Eigenschaft: Ein Framework sieht vor, dass man es mit Verhalten "erweitert", welches dem Framework zum Zeitpunkt seiner Erschaffung unbekannt ist. Dies passiert aber auf wohldefinierte Art und Weise unter den Bedingungen des Frameworks, üblicherweise über exponierte Schnittstellen.