Welche Bibliothek / welches Framework haben Sie als zu komplex für das zu lösende Problem eingestuft? [geschlossen]


12

... und die Funktionalität "manuell" codiert?

Als ein eher metaphorisches Beispiel bräuchten Sie kaum eine Bibliothek, um quadratische Gleichungen zu lösen, obwohl solche Bibliotheken existieren und jemand sie ernst nimmt.

Je nach den Umständen kann es sein, dass ich jQuery nicht mehr benötige (zum Beispiel, wenn ich einige steinzeitliche Browser nicht unterstützen muss): Es vereinfacht einige Dinge, fügt DOM jedoch eine weitere Ebene der Komplexität und Unzuverlässigkeit hinzu. Und die übermäßige Verwendung von jQuery führt zu absurden Problemen, wie sie kürzlich bei SO aufgetreten sind: Wie ordne ich einem aTag mit jQuery eine leere href zu ? Es stellte sich heraus, dass es sich um eine HTML-Frage handelte, nicht einmal um JavaScript.

Ein weiterer absurder und für viele nicht offensichtlicher Fall ist die Verwendung einer Template-Engine / Sprache, die auf einem anderen Template-System aufbaut: PHP. Dritte Ebene der Vorlage für jemanden?

Und noch eine: Manchmalprintf ist es viel einfacher , XML (im übertragenen Sinne) auszuspucken, als dies mit einer monströsen XML-Engine zu tun.

Andere Fälle aus Ihrer Erfahrung?


4
Wie jedes andere Tool verwenden Sie jQuery dort, wo es angebracht ist. Sie brauchen keinen Hammer und keinen Meißel, um Ihre Haustür zu öffnen, wenn Sie einen Schlüssel haben.
Robert Harvey

1
@Robert Harvey: Natürlich, aber in der Softwareentwicklung haben wir oft Probleme, Schlüssel und Hämmer zu erkennen. Darum geht es in der Post.
Mojuba

Bedenken Sie, dass eine populäre Bibliothek, egal wie komplex sie ist, für andere um Größenordnungen einfacher zu verstehen ist als Ihre benutzerdefinierte "einfache" Bibliothek, da sie daran gewöhnt ist.
Louis Kottmann

@RobertHarvey deine Tür muss in einem viel besseren Zustand sein als meine.
Jimmy Hoffa

Antworten:


14

Ein Großteil der MS Enterprise-Bibliotheken und die meisten Steuerelemente von Drittanbietern für .net haben mich nach einigem Gebrauch mit diesem Gefühl zurückgelassen.

Ihr Kilometerstand kann variieren


2
Einverstanden - Der Großteil der Enterprise-Bibliothek ist verwirrend oder nicht intuitiv. Es gibt eine Reihe von Bibliotheken von Drittanbietern, die bessere Arbeit leisten. Aber natürlich, wenn Sie einen Microsoft auf den Titel schlagen, muss es eine "Best Practice" sein
Watson

In den Anfangszeiten hat Entlib einige Dinge gemacht, die mit den frühen Frameworks schwierig zu tun oder herauszufinden waren. Heutzutage scheint es größtenteils eine Abwärtskompatibilität zu den Anfangszeiten oder teilweise gebackenen Lösungen zu sein, die Sie in zukünftigen Releases in einem Großteil sehen bessere Form.
Bill

13

Windows Communication Foundation

Die Tatsache, dass auf der Homepage ein Bild eines Schweizer Taschenmessers zu sehen ist, fasst alles für mich zusammen. Stellen Sie sich vor, die XML-Konfiguration ist ungefähr viermal so lang wie der eigentliche Code, den Sie schreiben immer noch sehr schwierig, SOAP-Dienste zu schreiben, die zwischen C #, Java, PHP, Python und all den anderen Sprachen kompatibel sind, für die sie gedacht waren. interoperabel sein mit ...

In allen zukünftigen Projekten werde ich mich nur an REST halten.


2
WCF 4.0 benötigt überhaupt keine XML-Konfigurationsdatei. Ich habe keine Erfahrung mit der Interoperabilität mit anderen Technologien (abgesehen von der Verwendung von WCF als Client, was gut funktioniert), aber ich kann sagen, dass ich es sowohl einfach als auch intuitiv fand. Auch wenn ich anfing, es zu benutzen, ohne Bücher zu lesen oder eine Schulung zu absolvieren (und die Fristen einzuhalten), war ich in der Lage, sofort loszulegen.
Allon Guralnek

4
Ich habe "WCF" in "WTF" umbenannt.
MetalMikester

1
@Allon: Ich gebe zu, ich habe WCF 4.0 nicht ausprobiert, es ist durchaus möglich, dass sie in diesem Bereich signifikante Verbesserungen vorgenommen haben ...
Dean Harding

12

Eines der Probleme, die ich mit Leuten hatte, die "ihre eigenen" rollten, war, dass sie - obwohl ihre Herangehensweise oft schneller und einfacher ist - auch eher spröde, fehlerhaft, unvollständig und / oder mit Sicherheitsmängeln behaftet sind .

Einfaches Beispiel: Es könnte zehnmal einfacher sein, printf zum Ausgeben von XML zu verwenden, als eine Bibliothek zu verwenden:

printf("<xml>%s</xml>", str);

Aber haben Sie daran gedacht, Sonderzeichen zu entkommen str? Zum Beispiel ' <' und ' &'? Einige Leute sagen vielleicht "Nein, habe ich nicht" und schreiben Folgendes:

printf("<xml><![CDATA[%s]]></xml>", str);

Aber es wird immer noch kaputtes XML ausgeben, wenn es strden Teilstring enthält "]]> " irgendwo darin enthalten ist. Edge Case - sicher. Aber immer noch ein gültiges Szenario, das zu unerwarteten Problemen mit schwerwiegenden Folgen führen könnte.

Es gibt viele Male und Orte, an denen "Rolling Your Own" angebracht ist, aber manchmal sind viel Erfahrung und Wissen erforderlich, um festzustellen, wann dies angebracht ist. Aus diesem Grund empfehle ich Programmierern oft, etablierte Bibliotheken (sofern verfügbar) anstelle von selbst implementierten Routinen zu verwenden.


11

Log4Net

Die Bibliothek ist gut, aber die Dokumentation ist horrend. Es war übertrieben für das, was ich tun wollte.

Ich habe stattdessen Trace verwendet.


1
Robert, du hast mich auch geschlagen, du Schuft! Ich schaue einfach auf log4net und denke: "Wow, diese Zuhörer sind cool. Wie verwende ich es jetzt?" und dann denke ich, bis ich es herausgefunden habe, hätte ich mein eigenes schreiben können.
JohnL

5
Wirklich - ich müsste respektlos widersprechen - einfacher geht es nicht als mit log.error ().
Watson

3
@Watson: Wenn es wirklich so einfach ist, warum brauchst du dann ein Framework?
Robert Harvey

Ich verwende die Alternative von The Object Guy, deren Konfiguration Minuten in Anspruch nimmt, da Log4Net unnötig komplex ist.
cjmUK

7

SharePoint

Verstehen Sie mich nicht falsch, SharePoint ist fantastisch, wenn Sie die meisten Dinge benötigen (und es kommt mit viel!), Aber wenn Sie nicht wissen, was Sie tun, oder wenn Sie es nur für ein oder zwei brauchen Dinge, es ist MASSIV die Mühe und Konfiguration nicht wert.


6

ASP.NET WebForms - Obwohl es als .NET-Webentwickler lange Zeit mein Ding war, seit ich das MVC-Framework (und das aus einer PHP / Smarty-Template-Umgebung stammt) verwende, stellen Sie fest, dass es manchmal einfach bessere gibt Möglichkeiten für die Webentwicklung und die verwendete Abstraktion sind übertrieben und undicht .


Ich denke, Sie meinen ASP.NET WebForms, im Gegensatz zu ASP.NET MVC. Richtig?
Eric King

@Eric - ja richtig, das sollte ich beheben!
Watson

3

In fast allen Fällen, in denen ich das getan habe, habe ich es am Ende bereut:

  • Die Verwendung der PHP-Funktionen oci_ * anstelle einer Wrapperbibliothek erwies sich aufgrund der Code-Wartbarkeit als eine schlechte Entscheidung. Das Portieren des gesamten Codes nach Zend_Db erleichterte die Entwicklung der Pflege des Datenbankcodes erheblich.
  • Rollen meiner eigenen Ajax-Gitterkomponente, die zu viel Zeit in Anspruch nahm, um weiterentwickelt zu werden, da sich einige der anderen Gitterkomponenten schnell entwickeln. Momentan portiere ich alles auf Ext JS-Grids, da mit diesen eine riesige Menge an Funktionen von Drittanbietern zur Verfügung steht.
  • Das Vermeiden von Bibliotheken wie Prototypen und Abfragen führte zu wiederholt auftretenden browserübergreifenden Problemen, die oft nur schwer aufzuspüren waren. Der Ext JS-Port hat meine browserübergreifenden Probleme gelöst. Es ist Magie, auch wenn es ein riesiger Rahmen ist, für dessen Verständnis ich Wochen gebraucht habe.

Ich bin zu dem Schluss gekommen, dass es viel besser ist, ein paar zuverlässige Frameworks von Drittanbietern auszuwählen und sie als Grundlage für alles zu verwenden, was Sie tun. Diese Frameworks werden von einer anderen Person entwickelt und getestet. Dies ist eine unglaubliche Zeitersparnis, wenn Sie sie standardisiert und gut verstanden haben.


+1. Und es hilft, wenn diese Bibliotheken Open Source sind. Laden Sie den Quellcode in alle von Ihnen verwendeten Bibliotheken herunter, sofern Sie dies noch nicht getan haben. Das Lesen des Quellcodes der Bibliothek ist eine großartige Möglichkeit, Probleme zu diagnostizieren und zu beheben sowie von dem Code anderer Programmierer (vermutlich von relativ hoher Qualität) zu lernen.
Mike Clark

2

System.Text.RegularExpressions

Regex ist so komplex und so langsam. Ich verwende sehr selten Regex und schreibe normalerweise mein eigenes Text-Parsing und Matching.

Gelegentlich finde ich Regex nützlich für sehr komplexe Übereinstimmungen.


Kompilieren Sie reguläre Ausdrücke korrekt [oder ist System.Text.RegularExpressions langsamer als Perl & Co. Implementierung]?
Maciej Piechotka

3
Regex ist zwar im Vergleich zum manuellen Parsen von Zeichenfolgen relativ langsam, aber es ist schneller als viele Leute denken und für die meisten praktischen Anwendungen in der Regel mehr als schnell genug.
Mike Clark

2
Ich glaube nicht, dass dies wirklich eine Beschwerde über die .NET-Implementierung ist, da nichts besonders Komplexes oder Langsames daran ist (tatsächlich habe ich festgestellt, dass es sich um eine der schnelleren Implementierungen handelt, die verfügbar sind). Zumindest war das meine Erfahrung. Natürlich werden reguläre Ausdrücke im Allgemeinen leicht komplex, und es besteht sicherlich die Tendenz, dass Menschen sie an völlig unangemessenen Orten verwenden.
Dean Harding

2

Nicht, dass Delphi4PHP eine schlechte Presse braucht, aber ich habe es ausprobiert (Version 2.0) und es war extrem schwer, es nach meinem Willen zu biegen. Ich wollte damit eine Web-App im Youtube-Stil für Kunden erstellen, um Schulungsvideos anzusehen, aber das war zu umständlich, und als ich versuchte, PHP-Frameworks (VCL4PHP, Zend, Smarty und Recess) zu kombinieren, stieß ich auf die unvermeidliche Umbenennung Alles, weil es in PHP 5 keine Namespaces gibt.

Davon abgesehen habe ich am Ende nicht meinen eigenen gerollt. Ich habe gerade aus meinen Fehlern gelernt und beschlossen, es sehr einfach zu halten und CodeIgniter und FlowPlayer (mit JQuery) zu verwenden.

Ich habe die Sehnsucht, dass PHP 6, unabhängig davon, welche Frameworks es aus PHP 5 machen, einige großartige Frameworks haben wird, die tatsächlich gut zusammenspielen könnten.


2

Weka

Ich mache viel maschinelles Lernen und wenn ich jemals etwas Einfaches wie Naive Bayes oder logistische Regression brauche, liebe ich es, Weka im Stich zu lassen. Es hat gute Implementierungen einiger ziemlich komplizierter Algorithmen für maschinelles Lernen, aber die API ist eine übermäßig objektorientierte Java-API der alten Schule (vorgenerische). Dinge, die mich daran ärgern:

  1. Es erstellt ein eigenes Array, dessen Größe geändert werden kann, das von keinem anderen Benutzer verwendet wird, und gewährleistet so eine arbeitsreiche Konvertierung hin und her.

  2. Viele sequentielle Kopplungen, bei denen Methoden in einer bestimmten Reihenfolge aufgerufen werden müssen, und wenn Sie RTFM nicht sorgfältig ausführen, werden Sie es nicht bemerken.

  3. Jede Instanz muss ein Instanzobjekt sein, und ich muss mit einem Attributobjekt explizit deklarieren, ob es sich um ein nominales oder ein numerisches Objekt handelt. Dies führt zu viel Arbeit beim Konvertieren von Daten in das von Weka gewünschte Format. Dies ist besonders ärgerlich, da die Weka-API so viele Ausnahmen auslöst, dass das Kompilieren von Code nicht bedeutet, dass es wahrscheinlich irgendwie funktioniert. Wenn ich die API entwerfen würde, wäre ich in Bezug auf das, was ich akzeptierte, liberal (vielleicht nehme ich einfach eine Reihe von Objekten) und würde nur die Daten in Augenschein nehmen, um herauszufinden, was ich habe und was das Richtige ist, um damit umzugehen.


2

Bei einem bestimmten Projekt habe ich EJB3 über Bord geworfen. Es gab mir Abhängigkeitsinjektion und containergesteuertes Transaktionshandling. Es führt jedoch zu großen Abhängigkeiten (z. B. JBoss) und erschwert das Schreiben automatisierter Tests für das System. Jetzt habe ich es auf JPA + Konstruktor-Abhängigkeitsinjektion reduziert.


1

HTML auf einen Debug-Port einer App ausspucken. Ich brauchte einen einfachen Weg, um einige aktuelle Daten zu erhalten (mit automatischer Aktualisierung). Das Einlesen einer Bibliothek zum Formatieren wäre gut gewesen, aber es war einfacher, sie einfach auszudrucken.

Ich habe auch eine Bibliothek für eine andere abgelehnt: Wir verwenden in den meisten unserer Sachen eine große, komplexe XML-Bibliothek. Nachdem ich 4 Stunden an einem Tag damit verbracht hatte, es in einer neuen App zum Laufen zu bringen, sagte ich nur "bag it" und holte TinyXML. Es ist nicht annähernd so mächtig, aber es erfordert VIEL weniger Aufwand, um es zu einfachen Dingen zu bringen.


1

Kürzlich habe ich an einem Compiler für Skriptsprachen gearbeitet, den ich in meinen Anwendungen verwenden kann. Ich habe andere benutzt, aber keine tut genau das, wofür ich sie brauche. Also überlegte ich mir, warum ich nicht versuchen sollte, meine eigenen zu schreiben. Es kann ein oder zwei Jahre dauern, bis es für den allgemeinen Gebrauch wirklich geeignet ist, aber das ist in Ordnung. Außerdem ist es eine großartige Lernerfahrung.

Eine andere Lösung ist die Übersetzung meiner Anwendungen. Es gibt bereits Bibliotheken, aber mir hat keine gefallen. Also habe ich meine eigene gemacht.

Und Delphis Datenbankkomponenten. Ich hasse sie. Immer haben. Also habe ich eine eigene Datenbankschnittstelle erstellt, die so funktioniert, wie ich es möchte (und genau so, wie ich es für PHP gemacht habe, um das Codieren zwischen Sprachen zu vereinfachen).

Wenn mir eine Option gegeben wird, mache ich normalerweise meine eigene Bibliothek.


Ich weiß, was du meinst. Ich kann Ihnen ein ganzes Arsenal von selbst gebrautem STL, DB-Abstraktion, ganzen Sprachen mit ihren Compilern oder Dolmetschern und was nicht zeigen. Es wird im Allgemeinen von Ihren Kollegen und dem Management nicht begrüßt, aber welcher Programmierer hat noch nie einen Compiler geschrieben, auch wenn es niemanden interessiert?
Mojuba

0

Ohhh, so viele. Ich habe an etlichen agilen Projekten mit Open Source Apis gearbeitet. Großartig, wenn sie funktionieren, aber oft haben wir Entwickler mit einem Fetisch dafür belästigt, dass sie alle möglichen Arten von Drittanbieter-Apis eingeführt haben, einige obskur, andere nicht, nur weil sie eine oder zwei Klassen in ihnen verwenden möchten. Das Endergebnis ist eine Mischung aus Code und gehackten Systemen. Sie geben es weiter und behaupten, es sei der beste Code aller Zeiten, gehen und die armen Kerle, die es abholen, finden ein unverständliches, undokumentiertes Durcheinander voller Abhängigkeitsprobleme und Hacks.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.