... 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 a
Tag 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?
quelle
Antworten:
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
quelle
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.
quelle
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:
Aber haben Sie daran gedacht, Sonderzeichen zu entkommen
str
? Zum Beispiel '<
' und '&
'? Einige Leute sagen vielleicht "Nein, habe ich nicht" und schreiben Folgendes:Aber es wird immer noch kaputtes XML ausgeben, wenn es
str
den 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.
quelle
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.
quelle
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.
quelle
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 .
quelle
In fast allen Fällen, in denen ich das getan habe, habe ich es am Ende bereut:
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.
quelle
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.
quelle
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.
quelle
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:
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.
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.
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle