it-swarm.com.de

Was ist ein Software-Framework?

Kann mir bitte jemand erklären, was ein Software-Framework ist? Warum brauchen wir einen Rahmen? Was macht ein Framework, um die Programmierung zu vereinfachen?

186
Anxious

Ich bin sehr spät dran, um darauf zu antworten. Ich möchte jedoch ein Beispiel nennen, an das ich heute nur gedacht habe. Wenn ich dir sagen würde, du sollst ein Stück Papier mit den Maßen 5 x 5 m schneiden, dann würdest du das sicherlich tun. Aber nehmen wir an, Sie sollen 1000 Stücke Papier mit den gleichen Abmessungen schneiden. In diesem Fall werden Sie die Messung nicht 1000 Mal durchführen. Natürlich würden Sie einen Rahmen von 5 x 5 m herstellen und dann mit dessen Hilfe 1000 Blatt Papier in kürzerer Zeit schneiden können. Sie haben also ein Framework erstellt, das eine bestimmte Art von Aufgabe erfüllt. Anstatt immer wieder denselben Aufgabentyp für denselben Anwendungstyp auszuführen, erstellen Sie ein Framework, in dem alle diese Funktionen in einem Nice-Paket zusammengefasst sind. Auf diese Weise wird die Abstraktion für Ihre Anwendung und vor allem für viele Anwendungen bereitgestellt.

411
Neha Choudhary

Technisch gesehen benötigen Sie kein Framework . Wenn Sie eine wirklich sehr, sehr einfache Site erstellen (denken Sie an das Web von 1992), können Sie dies alles mit hartcodiertem HTML und etwas CSS tun.

Und wenn Sie eine moderne Web-App erstellen möchten, müssen Sie auch kein Framework dafür verwenden .

Sie können stattdessen jederzeit die gesamte benötigte Logik selbst schreiben. Sie können Ihre eigene Datenpersistenz-/Speicherschicht schreiben oder - wenn Sie zu beschäftigt sind - einfach benutzerdefiniertes SQL für jeden einzelnen Datenbankzugriff schreiben. Sie können Ihre eigenen Authentifizierungs- und Sitzungsbehandlungsebenen erstellen. Und deine eigene Template-Rending-Logik. Und Ihre eigene Ausnahmebehandlungslogik. Und Ihre eigenen Sicherheitsfunktionen. Und Ihr eigenes Unit-Test-Framework, um sicherzustellen, dass alles einwandfrei funktioniert. Und deine eigene ... [geht ziemlich lange weiter]

Wenn Sie jedoch ein Framework verwenden , können Sie vom Guten profitieren , in der Regel Peer-Review und sehr gut getestete Arbeit von Dutzenden, wenn nicht Hunderten von anderen Entwicklern, die möglicherweise besser sind als Sie. Sie können in kürzester Zeit das erstellen, was Sie möchten, ohne sich um die oben aufgeführten Infrastrukturelemente kümmern zu müssen.

Sie können mehr in kürzerer Zeit erledigen und wissen, dass der von Ihnen verwendete oder erweiterte Framework-Code mit hoher Wahrscheinlichkeit besser erledigt werden kann als alles, was Sie selbst erledigen.

Und die Kosten dafür? Zeit investieren, um das Framework zu erlernen. Aber - wie praktisch jeder Web-Entwickler bezeugen wird - ist es definitiv die Zeit wert, die damit verbracht wird, massive (wirklich massive) Vorteile durch die Verwendung des von Ihnen gewählten Frameworks zu erlangen.

89
Steve Jalim

Die Zusammenfassung bei Wikipedia (Software Framework) (erster Google-Hit übrigens) erklärt es recht gut:

Ein Software-Framework in der Computerprogrammierung ist eine Abstraktion, in der allgemeiner Code, der allgemeine Funktionen bereitstellt, durch Benutzercode, der bestimmte Funktionen bereitstellt, selektiv überschrieben oder spezialisiert werden kann. Frameworks sind insofern ein Sonderfall von Softwarebibliotheken, als sie wiederverwendbare Abstraktionen von Code sind, der in eine wohldefinierte Anwendungsprogrammierschnittstelle (Application Programming Interface, API) eingebettet ist. Sie enthalten jedoch einige wichtige Unterscheidungsmerkmale, die sie von normalen Bibliotheken unterscheiden.

Software-Frameworks haben diese Unterscheidungsmerkmale, die sie von Bibliotheken oder normalen Benutzeranwendungen unterscheiden:

  1. Umkehrung der Steuerung - In einem Framework wird anders als in Bibliotheken oder normalen Benutzeranwendungen der Steuerungsfluss des gesamten Programms nicht vom Aufrufer, sondern vom Aufrufer vorgegeben Rahmen. [1]
  2. Standardverhalten - Ein Framework hat ein Standardverhalten. Dieses Standardverhalten muss tatsächlich ein nützliches Verhalten und keine Reihe von No-Ops sein.
  3. Erweiterbarkeit - Ein Framework kann vom Benutzer in der Regel durch selektives Überschreiben oder durch speziellen Benutzercode mit bestimmten Funktionen erweitert werden.
  4. nicht modifizierbarer Framework-Code - Der Framework-Code darf im Allgemeinen nicht modifiziert werden. Benutzer können das Framework erweitern, aber den Code nicht ändern.

Sie können es "brauchen", weil es Ihnen eine gute Verknüpfung beim Entwickeln von Anwendungen bietet, da es viele bereits geschriebene und getestete Funktionen enthält. Der Grund ist ziemlich ähnlich dem Grund, warum wir Softwarebibliotheken verwenden.

52
aioobe

Viele gute Antworten bereits, aber lassen Sie mich sehen, ob ich Ihnen einen anderen Standpunkt geben kann.

Wenn Sie die Dinge ein Stückchen vereinfachen, können Sie ein Framework als eine Anwendung anzeigen, die bis auf die eigentliche Funktionalität vollständig ist. Sie stecken die Funktionalität ein und PRESTO! Sie haben eine Bewerbung.

Betrachten Sie beispielsweise ein GUI-Framework. Das Framework enthält alles, was Sie zum Erstellen einer Anwendung benötigen. In der Tat können Sie eine minimale Anwendung mit sehr wenigen Quelltextzeilen erstellen, die absolut nichts bewirken - aber Sie erhalten Fensterverwaltung, Unterfensterverwaltung, Menüs, Schaltflächenleisten usw. Das ist die Rahmenseite der Dinge. Indem Sie Ihre Anwendungsfunktionalität hinzufügen und an die richtigen Stellen im Framework "einstecken", verwandeln Sie diese leere App, die nichts weiter als Fensterverwaltung usw. ausführt, in eine echte, vollständige Anwendung.

Es gibt ähnliche Framework-Typen für Web-Apps, für serverseitige Apps usw. In jedem Fall stellt das Framework den Großteil des langwierigen, sich wiederholenden Codes bereit (hoffentlich), während Sie die eigentliche Problemdomänenfunktionalität bereitstellen. (Dies ist das Ideal. In Wirklichkeit ist der Erfolg des Frameworks natürlich sehr unterschiedlich.)

Ich möchte noch einmal betonen, dass dies die vereinfachte Ansicht ist, was ein Framework ist. Ich verwende keine furchterregenden Begriffe wie "Inversion of Control" und dergleichen, obwohl die meisten Frameworks solche furchterregenden Konzepte enthalten. Da Sie ein Anfänger sind, dachte ich, ich würde Ihnen den Jargon ersparen und mit einem einfachen Gleichnis gehen.

Ich bin mir nicht sicher, ob es eine klare Definition von "Framework" gibt. Manchmal wird eine große Menge von Bibliotheken als Framework bezeichnet, aber ich denke, die typische Verwendung des Wortes kommt der Definition von aioobe näher.

Dieser sehr netter Artikel fasst den Unterschied zwischen einer Reihe von Bibliotheken und einem Framework zusammen:

Ein Framework kann als eine Reihe von Bibliotheken definiert werden, die sagen: "Rufen Sie uns nicht an, wir rufen Sie an."

Wie hilft Ihnen ein Framework? Denn anstatt etwas von Grund auf neu zu schreiben, erweitern Sie einfach eine bestimmte, funktionierende Anwendung. Auf diese Weise erhalten Sie eine Menge Produktivität - manchmal kann die resultierende Anwendung weitaus aufwändiger sein, als Sie es allein in demselben Zeitraum hätten tun können -, aber Sie handeln normalerweise mit einer Menge Flexibilität.

12
Oak

Eine einfache Erklärung lautet: Ein Framework ist ein Gerüst, auf dem Sie Anwendungen aufbauen können.

Ein Framework bietet im Allgemeinen einige Basisfunktionen, die Sie verwenden und erweitern können, um komplexere Anwendungen zu erstellen. Es gibt Frameworks für alle möglichen Dinge. Das MVC-Framework von Microsoft ist ein gutes Beispiel dafür. Es bietet alles, was Sie brauchen, um mithilfe des MVC-Musters von der Website zu kommen. Es verarbeitet Webanforderungen, Routen und dergleichen. Sie müssen lediglich "Controller" implementieren und "Views" bereitstellen, zwei Konstrukte, die vom MVC-Framework definiert werden. Das MVC-Framework ruft dann Ihre Controller auf und rendert Ihre Ansichten.

Vielleicht nicht die beste Formulierung, aber ich hoffe, es hilft

7
Sekhat

auf der untersten Ebene ist ein Framework eine Umgebung, in der Ihnen eine Reihe von Tools zur Verfügung stehen, mit denen Sie arbeiten können

diese Tools werden in Form von Bibliotheken, Konfigurationsdateien usw. bereitgestellt.

diese sogenannte "Umgebung" bietet Ihnen die Grundeinstellungen (Fehlerberichte, Protokolldateien, Spracheinstellungen usw.), die geändert, erweitert und erweitert werden können.

Die Menschen brauchen eigentlich keine Frameworks, es geht nur darum, Zeit zu sparen, und andere sind nur eine Frage der persönlichen Vorlieben.

Die Leute werden rechtfertigen, dass Sie mit einem Framework nicht von Grund auf neu programmieren müssen. Aber das sind nur Leute, die Bibliotheken mit Frameworks verwechseln.

Ich bin hier nicht voreingenommen, ich benutze gerade ein Framework.

4
yretuta

Im Allgemeinen ist ein Rahmenwerk eine reale oder konzeptionelle Struktur, die als Unterstützung oder Leitfaden für das Bauen von Dingen dienen soll, die die Struktur zu etwas Nützlichem erweitern ...

3
uma

Ein Framework hilft uns bei der Verwendung des "bereits Erstellten", eine Metapher kann wie folgt aussehen:

denke, dass Erdmaterial die Programmiersprache ist,

und zum Beispiel "eine Kamera" ist das Programm, und Sie haben beschlossen, ein Notizbuch zu erstellen. Sie müssen die Kamera nicht jedes Mal neu erstellen, sondern verwenden lediglich das Erd-Framework (z. B. für einen Technologieladen). Nehmen Sie die Kamera und integrieren Sie sie in Ihr Notebook.

2
stckvrflw

Über die Definitionen hinaus, die manchmal nur verständlich sind, wenn Sie sie bereits verstehen, hat mir ein Beispiel geholfen.

Ich glaube, ich habe ein wenig Verständnis dafür, wie ich eine Liste in .Net sortiere. Ein Beispiel für ein Framework, das eine Funktionalität bereitstellt, die durch Benutzercode mit bestimmten Funktionen angepasst wird. Nimm List.Sort (IComparer). Der Sortieralgorithmus, der sich im .Net-Framework der Sortiermethode befindet, muss eine Reihe von Vergleichen durchführen. kommt Objekt A vor oder nach Objekt B? Aber Sort selbst hat keine Ahnung, wie man den Vergleich macht. Nur der zu sortierende Typ weiß das. Sie konnten keinen Vergleichssortierungsalgorithmus schreiben, der von vielen Benutzern wiederverwendet werden kann und der alle verschiedenen Typen vorwegnimmt, nach denen Sie sortieren müssten. Sie müssen dieses Stück Arbeit dem Benutzer selbst überlassen. Hier ruft sort, auch bekannt als Framework, eine Methode im Benutzercode auf, deren Typ sortiert wird, damit er den Vergleich durchführen kann. (Oder es kann ein Delegierter verwendet werden.)

Habe ich das richtig verstanden?

2
BillB

Ein Framework verfügt möglicherweise über einige Funktionen, die Sie benötigen. Möglicherweise benötigen Sie eine Art von Arrays mit integrierten Sortiermechanismen. Oder vielleicht brauchen Sie ein Fenster, in dem Sie einige Steuerelemente platzieren möchten, alles, was Sie in einem Framework finden können. Es ist eine Art ARBEIT, die einen RAHMEN um Ihre eigene Arbeit umfasst.

EDIT: OK, ich bin dabei zu graben, was ihr mir zu sagen versucht habt;) Vielleicht habt ihr die Information zwischen den Zeilen "ARBEITEN, die einen RAHMEN überspannen ..." nicht bemerkt, bevor dies tiefer und tiefer fällt. Ich versuche, dem ein Wort zu geben, in der Hoffnung, dass Sie anmutig sind:
eine gute Erklärung zu der Frage "Unterschied zwischen einer Bibliothek und einem Framework", die ich hier gefunden habe
http://ifacethoughts.net/2007/06/04/difference-between-a-library-and-a-framework/

2
OlimilOops

Ein Framework bietet Funktionalitäten/Lösungen für den jeweiligen Problembereich.
Definition von wiki :

Ein Software-Framework in der Computerprogrammierung ist eine Abstraktion, in der allgemeiner Code, der allgemeine Funktionen bereitstellt, durch Benutzercode, der bestimmte Funktionen bereitstellt, selektiv überschrieben oder spezialisiert werden kann. Frameworks sind ein besonderer Fall von Softwarebibliotheken, da sie wiederverwendbare Abstraktionen von Code sind, der in eine gut definierte Anwendungsprogrammierschnittstelle (Application Programming Interface, API) eingebunden ist. Sie enthalten jedoch einige wichtige Unterscheidungsmerkmale, die sie von normalen Bibliotheken unterscheiden.

2
Soe Moe