Wann man KEIN Framework benutzt [geschlossen]

38

Heutzutage kann man für nahezu jede Sprache einen Rahmen finden, der für nahezu jedes Projekt geeignet ist. Die meisten modernen Frameworks sind relativ robust (im Allgemeinen), mit stundenlangen Tests, von Experten geprüftem Code und einer hervorragenden Erweiterbarkeit.

Ich denke jedoch, dass JEDES Framework einen Nachteil hat, wenn Programmierer als Community so stark von ihren gewählten Frameworks abhängig werden, dass sie die zugrunde liegenden Funktionen nicht mehr verstehen oder im Fall von neueren Programmierern die zugrunde liegenden Funktionen niemals erlernen anfangen mit. Es ist leicht, sich so zu spezialisieren, dass Sie (zum Beispiel) nicht länger ein PHP-Programmierer sind, sondern ein "Drupal-Programmierer", unter Ausschluss von allem anderen.

Wen interessiert es, richtig? Wir haben den Rahmen! Wir müssen nicht wissen, wie man es von Hand macht! Richtig?

Der Verlust grundlegender Fähigkeiten (manchmal in dem Maße, in dem Programmierer, die keine Frameworks verwenden, als "veraltet" eingestuft werden) hat zur Folge, dass es gängige Praxis ist, ein Framework zu verwenden, das nicht erforderlich oder angemessen ist. Die Funktionen, die das Framework ermöglicht, werden mit den Fähigkeiten der Basissprache verwechselt. Entwickler beginnen damit, Frameworks zu verwenden, um die grundlegendsten Aufgaben zu erledigen. Was früher als rudimentärer Prozess galt, umfasst jetzt große Bibliotheken mit ihren eigenen Macken, Fehlern und Abhängigkeiten. Was früher in 20 Zeilen ausgeführt wurde, wird jetzt durch Einfügen eines Frameworks mit 20.000 Zeilen UND Schreiben von 20 Zeilen zur Verwendung des Frameworks erreicht.

Umgekehrt will man das Rad nicht neu erfinden. Wenn ich Code schreibe, um eine grundlegende, allgemeine kleine Aufgabe zu erledigen, habe ich möglicherweise das Gefühl, dass ich meine Zeit vergeude, wenn ich weiß, dass das Framework XYZ alle Funktionen bietet, nach denen ich Ausschau halte, und vieles mehr. Der "ganz viel mehr" Teil hat mich immer noch beunruhigt, aber es scheint, dass viele nicht einmal mehr darüber nachdenken.

Es muss eine gute Metrik geben, um zu bestimmen, wann es angemessen ist, ein Framework zu verwenden. Wie schätzen Sie den Schwellenwert ein, wie entscheiden Sie , wann Sie ein Framework verwenden, oder wann nicht.

Chris
quelle
Wenn es sich um ein Framework handelt, das kein Microsoft-eigenes Produkt ist und Sie eine Verbindung zu einer MSSql-Datenbank herstellen müssen.
AndrewKS
3
Der Punkt, dass jeder "zu spezialisiert" wird, ist ziemlich lächerlich. Können Sie Assembler-Code für die x86-Plattform schreiben? Wenn Sie dann können, können Sie das gleiche für sagen wir 8051 tun? Auch wenn Sie in der Lage sind, beides zu tun, gibt es viele andere Dinge, die Sie nicht tun können. Heute heißt es TEAMWORK - Sie müssen so viel wissen, wie Sie können, um Ihre Arbeit zu erledigen und mit anderen zusammenzuarbeiten. Das ist es.
Kubal5003
Wenn dieses Framework in Perl erstellt wird. Aufgeblähte / geschlossene Frameworks nerven mich auch. MsTest ist ein Beispiel.
Job
2
@ kuba5003 - Wie es passiert, kann ich beides schreiben, aber das ist nicht der Punkt. :) Selbst wenn ich nicht in der Lage wäre, in diesen Sprachen zu schreiben, sollte ich eine Vorstellung davon haben - wenn ich Gerätetreiber schreiben würde -, obwohl ich eine viel höhere Sprache verwenden könnte und wahrscheinlich würde, um mein Ziel zu erreichen Tor. In der Web-Welt sollte ein "Drupal-Programmierer" eine Grundlage in PHP haben. Mein Argument in dieser Hinsicht ist, dass es eine Glockenkurve der Spezialisierung gibt, und wenn Sie sich auf den Ausschluss von Grundkenntnissen spezialisieren, gibt es sinkende Renditen.
Chris
1
Verwenden Sie niemals ein Framework. Verwenden Sie stattdessen Bibliotheken. In Frameworks erfahren Sie, wie Sie Ihren Code so schreiben, wie Sie es möchten, während Bibliotheken ihre Spezialität in Ihren Code einbringen. Mit einer Bibliothek haben Sie also den Vorteil, dass Sie die Räder nicht neu erfinden und dennoch den Code schreiben können, den Sie benötigen. Frameworks sind nur für den Einstieg oder schnelle Projekte nützlich.
gbjbaanb,

Antworten:

27

"Es muss eine gute Metrik geben, um festzustellen, wann es angemessen ist, ein Framework zu verwenden."

Nicht wirklich. Wenn es gute Metriken gäbe, um den angemessenen Einsatz einer Technologie zu bestimmen, würden Sie keine Sprache, keinen Editor und keine Methodik für Holy Wars sehen.

Die Gruppen, mit denen ich zusammengearbeitet habe, machen dasselbe - schätzen Sie Kosten und Nutzen, wählen Sie den produktivsten Weg und hoffen Sie, dass sie Recht haben. Es ist nicht besonders wissenschaftlich - ein Teil Intuition, drei Teile Erfahrung, ein Teil Anfälligkeit für Marketing, ein Teil List und fünf Teile Meinung.

Corbin March
quelle
elf teile? oO
Michel Ayres
5
@MichelAyres Es geht um 11!
吖 吖 说
2
Er hat nicht "Prozent" gesagt, oder? ; o)
heltonbiker
14

Frameworks sind nur Werkzeuge. Ich denke nicht, dass es ein Fehler des Frameworks ist, wenn es überbeansprucht wird, sondern der Person, die es überbeansprucht. Das alte Sprichwort "Wenn Sie einen Hammer haben, sieht alles wie ein Nagel aus" zeigt, dass diese Denkweise schon lange existiert, bevor es überhaupt Computer gab.

Zu spezialisiert zu werden, kann langfristig zu einem Problem werden - sowohl für Entwickler als auch für biologische Arten. Um langfristig zu überleben, muss man die Anstrengungen sorgfältig abwägen, um seine Fähigkeiten in mehreren Bereichen zu entwickeln.

Um Ihre spezifische Frage zu beantworten, gibt es meiner Meinung nach keine Metrik dafür. Ich bevorzuge die Verwendung eines Frameworks, wenn es die Problemlösung vereinfacht. Wenn mir die Verwendung eines Frameworks hilft, ein Problem mit 2 anstatt 20 Codezeilen zu lösen, werde ich es natürlich verwenden. Aber selbst wenn es 20 Zeilen gegen 20 sind, könnte ich mich für ein Framework entscheiden, wenn es mir bessere Abstraktionen gibt, näher an der Problemdomäne, wodurch der Code einfacher zu verstehen und zu warten ist.

Péter Török
quelle
6

Ich denke, dass Frameworks in einigen Kontexten möglicherweise überlastet sind, ja. Ein Framework ist nur ein Werkzeug, ja. Ein Framework ermöglicht es Ihnen, etwas sehr schnell zum Laufen zu bringen, und ist daher ein hervorragendes Werkzeug für das Prototyping.

Irgendwann, wenn Ihre Anwendung ein gewisses Maß an Komplexität erreicht, scheinen mir die Einschränkungen, die einem Framework innewohnen, das weitere Wachstum zu hemmen. Der Trick besteht darin, zu erkennen, wann Sie auf einen solchen Wendepunkt gestoßen sind, und dann zu entscheiden, was Sie dagegen tun werden.

leed25d
quelle
6

Ich arbeite meistens mit Webanwendungen, und obwohl ich versuche, allgemein zu sein, trifft meine Antwort möglicherweise nicht auf Ihren Programmierbereich zu.

Ich werde auch "framework" synonym mit "library" verwenden.


Vor der Implementierung eines Frameworks müssen einige Dinge beachtet werden, hier einige allgemeine Beispiele.

# 1. Spart das Framework Zeit und Mühe?

Die Antwort auf diese Frage lautet fast immer ja . Frameworks werden in der Regel erstellt, um bestimmte Probleme zu lösen und sie sehr gut zu lösen . Frameworks wie EntityFramework können Sie beispielsweise vollständig vom Schreiben von SQL-Code abhalten . Was fantastisch sein kann, wenn Ihr Programmierteam kein fließendes SQL beherrscht.

Frameworks wurden erstellt, um entweder a) eine programmiererfreundliche Schnittstelle zu ansonsten komplexen Komponenten hinzuzufügen oder b) bereits bekannten (oder etablierten) Komponenten eine Abstraktion hinzuzufügen.

Letzteres (oder in einigen Fällen sogar Ersteres) kann der Entwicklung tatsächlich im Wege stehen . Dies gilt insbesondere dann, wenn Sie oder Ihr Programmierteam ein neues Framework implementieren, in dem sie noch nie zuvor gearbeitet haben.

Dies kann möglicherweise den Entwicklungsprozess verlangsamen, was möglicherweise kostspielig sein kann.

# 2 Der Umfang Ihrer Bewerbung

Es heißt, "alles , was es wert ist, getan zu werden, ist es wert, übertrieben zu werden" , aber normalerweise ist das nicht der Fall. Es gibt wahrscheinlich keinen guten Grund, ein übergroßes Framework zu implementieren, wenn der Sinn Ihrer Anwendung darin besteht, "Kartoffel" zu drucken .

Wenn Sie eine Anwendung entwickeln (sei es eine Web-, Desktop-, Mobil- oder eine andere denkbare Art von Anwendung) - wenn Sie der Meinung sind, dass die Größe Ihres Frameworks Ihre (möglicherweise zukünftige) Implementierung beeinträchtigt, ist dies möglicherweise eine große Herausforderung Warnsignal, dass Ihr Framework Ihre Anwendung möglicherweise nur aufbläht. Eine gute Anekdote wäre, wenn Sie jQuery einbinden, nur um Ihrem Body-Tag eine "geladene" Klasse hinzuzufügen, wenn das Dokument fertig ist. Dies nur mit nativem JavaScript zu tun, mag ein bisschen schwieriger sein , aber Ihre Anwendung wird dadurch nicht aufgebläht.

Auf der anderen Seite, wenn ein Framework eine Menge Dirty Work im Inneren ausführt (dh Datenbank-Frameworks), ist es möglicherweise sinnvoll, es zu implementieren, auch wenn Sie das Framework nur "teilweise" verwenden. Eine gute Anekdote wäre, nicht zu versuchen, einen eigenen ADO.NET- oder MongoDB-Treiber zu erstellen, nur weil Sie nicht die gesamte Bibliothek nutzen müssen.

Manchmal kommen Frameworks als Open Source (und mit 'do-whatever-you-want'-Lizenzen). Dies eröffnet eine neue Möglichkeit, bei der sich ein Programmierteam möglicherweise nur für Teile eines Frameworks entscheidet.

Dies knüpft letztendlich an Frage 1 und 3 an.

# 3 Auswirkungen.

Manchmal wirkt sich die Implementierung eines Frameworks direkt auf den Endbenutzer aus. Dies gilt insbesondere für Webanwendungen, da große clientseitige Frameworks die Benutzererfahrung negativ beeinflussen können. Benutzer mit langsameren Computern können langsames Rendern, Leistungsprobleme mit Javascript oder ähnliche Probleme, die durch untergeordnete Computer verursacht werden, feststellen. Benutzer mit langsamen Verbindungen können langsame (zumindest anfängliche) Ladezeiten haben.

Auch in anderen Anwendungsarten können Endbenutzer von Ihren Anwendungsabhängigkeiten beeinträchtigt werden. Frameworks zumindest immer nehmen etwas Speicherplatz, und wenn Sie eine mobile App (oder sogar eine Desktop - Anwendung) entwickeln könnte dies erforderlich werden , um in Betracht gezogen werden.

Serverseitige Frameworks (noch webspezifischer) wirken sich höchstwahrscheinlich nicht auf Ihre Endbenutzer aus, wirken sich jedoch auf Ihre Infrastruktur aus . Einige Frameworks weisen Abhängigkeiten auf , die möglicherweise einen Neustart des Webservers erfordern, entweder nur des Dienstes oder des gesamten Servers.

Einige Frameworks sind möglicherweise auch sehr ressourcenintensiv.

Dies knüpft natürlich an Punkt 1 und 2 an.


Es ist alles nur ein großer "Kreis von Überlegungen", und es gibt keine wirkliche wissenschaftliche Methode, um zu entscheiden, ob Sie ein Framework implementieren sollten oder nicht.

Corbin March hat es sehr gut zusammengefasst:

Die Gruppen, mit denen ich zusammengearbeitet habe, machen dasselbe - schätzen Sie Kosten und Nutzen, wählen Sie den produktivsten Weg und hoffen Sie, dass sie Recht haben. Es ist nicht besonders wissenschaftlich - ein Teil Intuition, drei Teile Erfahrung, ein Teil Anfälligkeit für Marketing, ein Teil List und fünf Teile Meinung.

Es ist auch wichtig, nicht elitär zu sein . Frameworks sind Werkzeuge, die verwendet werden sollen. Ich kenne Menschen beider Extreme. Auf der einen Seite macht sich der Typ das Leben schwer, auf der anderen Seite der Typ, der langsame, aufgeblähte Anwendungen erstellt.

Alle Frameworks haben Use-Cases, es geht nur darum, sie für die richtigen Zwecke zu implementieren.

die maus
quelle
4

Kennen die anderen Entwickler das Framework?

Wenn alle Entwickler mit Framework X vertraut sind und alle anderen Gründe für die Verwendung des Frameworks gegeben sind, sollten Sie sich dafür entscheiden! Für mich macht es keinen Sinn, das Erlernen eines bestimmten Frameworks zu erzwingen, wenn der Großteil der Entwicklungszeit für das Erlernen der Feinheiten des Frameworks aufgewendet wird.

In Bezug auf Ihre Aussage zu neueren Programmierern, die die Grundlagen nicht kennen, sind Sie viel mitfühlender als ich! Ja, es ist eine Schande, aber werde ich meine Zeit damit verbringen, mir Sorgen über die Unfähigkeit eines anderen zu machen? Nup. (Ausgehend von der Annahme, dass diese neuen Mitglieder der Community nicht sofort mit Ihnen zusammenarbeiten.)

Jonathan Khoo
quelle
4

Ich würde ein Framework verwenden, wenn (und NUR wenn) die folgenden Bedingungen zutreffen:

Das Framework dürfte noch einige Zeit unterstützt werden. Ich hatte sie schon einmal am Ende meines Lebens und es ist WIRKLICH ärgerlich. Vor allem, wenn Sie 9 Monate in Ihrem Projekt sind und ein Wechsel nicht mehr in Frage kommt. Und wenn das Framework BEREITS nicht mehr unterstützt wird, überlegen Sie dreimal, bevor Sie mit diesem Framework etwas Neues schreiben. Egal wie gut du es schon kennst.

Das Projekt passt tatsächlich zum Framework. Haben Sie als ein ziemlich altes Beispiel die Dinge gesehen, für die MFC gemacht wurde? Die Leute haben viele seltsame Dinge getan, damit es für Arten von Apps funktioniert, für die es einfach keinen Sinn ergab. Normalerweise verbringen sie mehr Zeit mit MFC als mit dem Schreiben der gewünschten App.

Das Projektteam ist in der Lage, im Rahmen zu arbeiten. Einige Leute nehmen sich nicht die Zeit, um zu verstehen, wie eine App in einem bestimmten Framework geschrieben werden sollte, und schreiben stattdessen Dinge so, wie sie es normalerweise tun, anstatt so, wie es das Framework benötigt. Diese Fehlanpassung von Code und Framework kostet normalerweise jeden viel Zeit und Mühe.

Michael Kohne
quelle
Der letzte Absatz enthält eine allzu häufige Falle: "Einige Leute (...) können sich nicht die Zeit nehmen, um (...). Diese Fehlanpassung (...) kostet alle viel Zeit und Mühe. " Sie haben also keine Zeit zu verlieren (jetzt) ​​und verlieren dadurch viel (mehr?) Zeit (später) ...
heltonbiker 19.06.15