Was ist ein Software-Framework? [geschlossen]

193

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?

Ängstlich
quelle

Antworten:

422

Ich bin sehr spät, um es zu beantworten. Aber ich möchte 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. Angenommen, ich bitte Sie, 1000 gleich große Papierstücke zu 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 erstellen und dann mit dessen Hilfe 1000 Stück Papier in kürzerer Zeit schneiden können. Sie haben also ein Framework erstellt, das eine bestimmte Art von Aufgabe erledigt. Anstatt immer wieder denselben Aufgabentyp für denselben Anwendungstyp auszuführen, erstellen Sie ein Framework, das alle diese Funktionen in einem schönen Paket zusammenfasst und somit die Abstraktion für Ihre Anwendung und vor allem für viele Anwendungen bereitstellt.

Neha Choudhary
quelle
27
Ich würde gerne wissen, warum die Antwort abgelehnt wurde. Es wird mir helfen, es zu verbessern.
Neha Choudhary
4
cool sehr leicht zu verstehen ........... vielen Dank
Premkumar
25
@NehaChoudhary, nicht ich, aber er -1, weil Sie über eine Bibliothek sprechen, nicht über ein Framework, da es kein IoC gibt.
Pacerier
11
Ich habe Ihren Beitrag gelesen, aber was Sie posten, klingt wie das, was eine Bibliothek tun kann. Wie wäre es, den Unterschied zwischen Framework und Bibliothek zu erklären?
Aaron Liu
2
Ich verstehe nicht. Nach dem, was Sie erklärt haben, wäre das eher eine Bibliothek, oder?
Router
92

Technisch brauchen Sie kein Framework. Wenn Sie eine wirklich sehr einfache Website erstellen (denken Sie an das Web von 1992), können Sie dies alles mit fest codiertem HTML und etwas CSS tun.

Und wenn Sie ein modernes Webapp machen wollen, müssen Sie nicht wirklich brauchen einen Rahmen dafür zu verwenden, auch nicht .

Sie können stattdessen jedes Mal die gesamte Logik schreiben, die Sie selbst benötigen. 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 Sitzungsbehandlungsschichten schreiben. Und Ihre eigene Template-Rending-Logik. Und Ihre eigene Ausnahmehandlungslogik. 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 von der guten, normalerweise von Experten geprüften und sehr gut getesteten Arbeit von Dutzenden, wenn nicht Hunderten anderer Entwickler profitieren, die möglicherweise besser sind als Sie. Sie können schnell das erstellen, was Sie möchten, ohne Zeit damit verbringen zu müssen, sich um die oben aufgeführten Infrastrukturelemente zu kümmern.

Sie können in kürzerer Zeit mehr erledigen und wissen, dass der von Ihnen verwendete oder erweiterte Framework-Code sehr wahrscheinlich besser ausgeführt wird als alles selbst.

Und die Kosten dafür? Zeit investieren, um das Framework zu lernen. Aber - wie praktisch jeder Webentwickler da draußen bezeugen wird - es lohnt sich auf jeden Fall, zu lernen, um massive (wirklich, massive) Vorteile aus der Verwendung eines beliebigen Frameworks zu ziehen.

Steve Jalim
quelle
17
Warum nicht diese Energie in einen Beitrag zu einem Open-Source-Framework stecken, anstatt Ihre eigenen Sachen zu peitschen? 'Allein können wir Steine ​​bewegen; zusammen können wir Berge versetzen 'und all das
Steve Jalim
7
@ Jefffrey "Wie wirst du dann lernen? Wie wirst du als Programmierer aufwachsen?" Lernen Sie, wie Sie möchten, aber wenn Sie für einen echten Kunden arbeiten möchten, sollten Sie die bestmögliche Lösung in kürzester Zeit bereitstellen. IHR "wahrscheinlich fehlerhafter" Code ist dafür nicht akzeptabel.
Cmorales
6
@Cmorales, wenn Sie jede „echte“ lernen wollen werden eine Programmiersprache oder eine domänenspezifische Problem , das Sie sicher nicht Client haben (und Sie werden möglicherweise viel Zeit in der Hand) und das ist , warum ich Neulingen vorschlagen nicht von Frameworks ausgehen.
Schuh
3
@ Jefffrey Du hast in deinem Kommentar nichts über Neulinge gesagt, es war allgemein. Ich bin damit einverstanden, dass Sie zuerst selbst lernen sollten, aber in Ihrem Kommentar wurde dies nicht angegeben, und im wirklichen (Arbeits-) Leben können Sie es sich nicht leisten, fehlerhaften Code nur zum Lernen zu verwenden. Ich kenne einige Leute, die keine Frameworks verwenden, weil sie denken, sie wissen es besser ... und verbringen die doppelte Zeit für jedes Projekt.
Cmorales
1
@Cmorales Ich kenne auch einige Leute, die Frameworks verwenden, sich aber für jedes Projekt doppelt so viel Zeit nehmen. Die Programmiergeschwindigkeit hängt nicht immer von den verwendeten Werkzeugen ab.
Cypher
53

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

Ein Software-Framework in der Computerprogrammierung ist eine Abstraktion, bei 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, die in eine genau definierte API (Application Programming Interface) eingebunden sind. Sie enthalten jedoch einige wichtige Unterscheidungsmerkmale, die sie von normalen Bibliotheken trennen.

Software-Frameworks verfügen über folgende Unterscheidungsmerkmale, die sie von Bibliotheken oder normalen Benutzeranwendungen trennen:

  1. Umkehrung der Kontrolle - In einem Framework wird der Kontrollfluss des gesamten Programms im Gegensatz zu Bibliotheken oder normalen Benutzeranwendungen nicht vom Aufrufer, sondern vom Framework vorgegeben. [1]
  2. Standardverhalten - Ein Framework hat ein Standardverhalten. Dieses Standardverhalten muss tatsächlich ein nützliches Verhalten sein und darf keine Reihe von No-Ops sein.
  3. Erweiterbarkeit - Ein Framework kann vom Benutzer in der Regel durch selektives Überschreiben erweitert oder durch Benutzercode spezialisiert werden, der bestimmte Funktionen bereitstellt.
  4. Nicht modifizierbarer Framework-Code - Der Framework-Code darf im Allgemeinen nicht geändert werden. Benutzer können das Framework erweitern, aber seinen Code nicht ändern.

Sie "brauchen" es möglicherweise, weil es Ihnen eine großartige Verknüpfung bei der Entwicklung von Anwendungen bietet, da es viele bereits geschriebene und getestete Funktionen enthält. Der Grund ist dem Grund ziemlich ähnlich, warum wir Softwarebibliotheken verwenden.

aioobe
quelle
13
Der weiße Teil Ihrer Antwort war je nach Art der Frage viel besser als der graue Teil ...
OlimilOops
Ich bin mir ziemlich sicher, dass die Person, die die Frage gestellt hat, auch den Wikipedia-Eintrag gefunden hat ... Er / Sie hat wahrscheinlich nach einer umfassenderen Antwort gesucht.
Stophface
31

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

Wenn Sie die Dinge ein wenig vereinfachen, können Sie ein Framework als eine Anwendung anzeigen, die bis auf die eigentliche Funktionalität vollständig ist. Sie schließen die Funktionalität und PRESTO! Sie haben eine Bewerbung.

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

Es gibt ähnliche Arten von Frameworks für Web-Apps, für serverseitige Apps usw. In jedem Fall stellt das Framework (hoffentlich) den Großteil des langwierigen, sich wiederholenden Codes bereit, 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 betone noch einmal, dass dies die vereinfachte Sichtweise eines Frameworks ist. Ich verwende keine beängstigenden Begriffe wie "Inversion of Control" und dergleichen, obwohl in den meisten Frameworks solche beängstigenden Konzepte integriert sind. Da Sie ein Anfänger sind, dachte ich, ich würde Ihnen den Jargon ersparen und mit einem einfachen Gleichnis gehen.

NUR MEINE RICHTIGE MEINUNG
quelle
14

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

Dieser sehr schöne Artikel fasst den Unterschied zwischen nur 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 viel Produktivität - manchmal kann die resultierende Anwendung weitaus aufwändiger sein, als Sie es im gleichen Zeitraum alleine hätten tun können -, aber Sie handeln normalerweise mit viel Flexibilität.

Eiche
quelle
8

Eine einfache Erklärung lautet: Ein Framework ist ein Gerüst, um das Sie Anwendungen erstellen 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 Microsoft MVC Framework ist ein gutes Beispiel dafür. Es bietet alles, was Sie benötigen, um mithilfe des MVC-Musters von der Website des Bodenbaus zu gelangen. Es verarbeitet Webanfragen, Routen und dergleichen. Sie müssen lediglich "Controller" implementieren und "Ansichten" bereitstellen, zwei Konstrukte, die vom MVC-Framework definiert werden. Das MVC-Framework übernimmt dann das Aufrufen Ihrer Controller und das Rendern Ihrer Ansichten.

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

Sekhat
quelle
1
Eigentlich ist es eher so, als würde man Anwendungen in das Gerüst einbauen als um dieses herum .
Jörg W Mittag
4

Auf der untersten Ebene ist ein Framework eine Umgebung, in der Sie eine Reihe von Tools erhalten, mit denen Sie arbeiten können

Diese Tools werden in Form von Bibliotheken, Konfigurationsdateien usw. geliefert.

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 codieren müssen. Aber das sind nur Leute, die Bibliotheken mit Frameworks verwechseln.

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

Yretuta
quelle
4

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

uma
quelle
2

Ein Framework bietet Funktionen / Lösungen für den jeweiligen Problembereich.
Definition aus dem Wiki :

Ein Software-Framework in der Computerprogrammierung ist eine Abstraktion, bei 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, die in eine genau definierte API (Application Programming Interface) eingebunden sind. Sie enthalten jedoch einige wichtige Unterscheidungsmerkmale, die sie von normalen Bibliotheken trennen.

Soe Moe
quelle
Im ersten Satz steht ein Wort "Abstraktion". Was meinst du damit ? Wo verwenden wir Abstraktion?
Kumaresan Perumal
2

Ein Framework hilft uns bei der Verwendung des "bereits erstellten", eine Metapher kann sein wie:

denke, dass Erdmaterial die Programmiersprache ist,

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

stckvrflw
quelle
2

Ein Framework verfügt über einige Funktionen, die Sie möglicherweise benötigen. Möglicherweise benötigen Sie Arrays mit integrierten Sortiermechanismen. Oder Sie benötigen 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 sagen wollt;) ihr habt vielleicht die Informationen zwischen den Zeilen "ARBEIT, die einen RAHMEN umspannt ..." nicht bemerkt, bevor dies tiefer und tiefer fällt. Ich versuche, ihm ein Wort zu geben, in der Hoffnung, dass Sie freundlich sind:
eine gute Erklärung für die Frage "Unterschied zwischen einer Bibliothek und einem Framework", die ich hier gefunden habe
http://ifacethoughts.net/2007/06/04/difference-between- a-Bibliothek-und-ein-Framework /

OlimilOops
quelle
Verstehe die Abstimmungen überhaupt nicht ... Ich bin völlig fassungslos darüber. Die Frage ist die Art von Anfänger-Grundfrage und meine Antwort war dementsprechend ziemlich gut ...
OlimilOops
4
Um es klar zu sagen: Ich habe nicht abgestimmt. Sie sprechen jedoch auf einer viel niedrigeren Ebene als das, worum es bei einem Framework geht. Sammlungen und Sortieralgorithmen sind eher Standardbibliotheken als beispielsweise Frameworks.
Bakkal
1
Danke für die Antwort, aber ... es ist nicht die Antwort auf meine Frage. Nach der Frage von OP ist die Unterscheidung zwischen "Standardbibliothek" und "Framework" hier der falsche Ort. Zum Beispiel finden Sie im .net-Framework die Namespace-Sammlungen in einem Teil des Frameworks. Ich habe noch nie jemanden sagen hören, dass die Namespace-Sammlung nicht Teil des .netframeworks ist. Ihre Antwort auf meine Frage ist also falsch
OlimilOops
1
Dies ist die Definition einer Bibliothek . Es fehlt das Unterscheidungsmerkmal eines Frameworks im Gegensatz zu einer Bibliothek: Inversion of Control .
Jörg W Mittag
2

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

Ich glaube, ich habe einen Anflug von Verständnis bekommen, als ich versucht habe, eine Liste in .Net zu sortieren. Ein Beispiel für ein Framework, das eine Funktionalität bereitstellt, die auf Benutzercode zugeschnitten ist und bestimmte Funktionen bietet. Nehmen Sie List.Sort (IComparer). Der Sortieralgorithmus, der sich in der Sortiermethode im .NET-Framework befindet, muss eine Reihe von Vergleichen durchführen. Kommt Objekt A vor oder nach Objekt B? Aber Sort selbst hat keine Ahnung, wie der Vergleich durchgeführt werden soll. das weiß nur der zu sortierende Typ. Sie konnten keinen Vergleichssortieralgorithmus schreiben, der von vielen Benutzern wiederverwendet werden kann, und alle verschiedenen Typen vorwegnehmen, zu deren Sortierung Sie aufgefordert werden. Sie müssen diese Arbeit dem Benutzer selbst überlassen. Hier ruft sort, auch bekannt als Framework, eine Methode im Benutzercode auf, wobei der Typ sortiert wird, damit der Vergleich durchgeführt werden kann. (Oder ein Delegat kann verwendet werden;

Habe ich das richtig verstanden?

BillB
quelle