Was meine Frage nachfragt, ist dieser Beitrag von Jeff Atwood und dieser Post von Dare Obasanjo. Es scheint mir, dass es mindestens ein paar Bereiche gibt, in denen die Funktionalität von Drittanbietern eine bessere Idee ist als benutzerdefinierter Code.
Sollte zum Beispiel das Logging immer ein Drittanbieter sein? Wie wäre es mit Verschlüsselung? Oder suchen?
Ich freue mich auf das Feedback von allen.
Bearbeiten: Bei dieser Frage wird davon ausgegangen, dass die Protokollierung, Verschlüsselung und / oder Suche nicht Ihr Kerngeschäft ist.
Es kommt darauf an. Gibt es eine 3rd-Party-Bibliothek, die Ihren Anforderungen und vor allem der Sprache und / oder API entspricht, mit der Sie arbeiten? Dann mach es.
Wenn Sie Gründe haben, Ihre eigene Version zu erstellen, stellen Sie sicher, dass es nicht nur "nicht erfunden" ist. Wenn Sie sich die fünf führenden Produkte des Marktes noch nicht genau angesehen haben, haben Sie Ihre Arbeit nicht gründlich genug erledigt. Es gibt gute Chancen, dass Sie finden, was Sie suchen, und selbst wenn Sie es nicht verwenden können, lernen Sie noch etwas aus den Bibliotheksbeschreibungen. Sie erfahren mindestens, welche Funktionen Sie benötigen und welche nicht. Wenn Sie den Quellcode auch für eine der Bibliotheken erhalten, sollte dies Ihre bevorzugte Wahl gegenüber einer konkurrierenden Bibliothek ohne Quellcode sein, möglicherweise aber mit mehr Funktionen.
Verschlüsselung sollte die meiste Zeit von Dritten sein, ... es sei denn, Sie verkaufen Verschlüsselungssysteme.
Was ziemlich Mr. Atwood ist, sein Punkt, wie ich es verstanden habe, sollten Ihre Kerngeschäfte nicht Dritte sein, also gibt es wahrscheinlich nichts, was immer Dritte sein sollte ...
>Meine Faustregel ist, Drittanbieter für alles zu verwenden (oder zumindest in Betracht zu ziehen), das außerhalb des Kerngeschäfts Ihres Unternehmens liegt.
Verschlüsselung war schon immer das prototypische Beispiel dafür. Aber es erstreckt sich auch auf andere Bereiche.
Das Schreiben von Protokollierungscode für die Fehlerbehebung während der Entwicklung unterscheidet sich grundlegend von dem Schreiben von Protokollierungscode, der für die Überwachung von Produktionssystemen verwendet wird.
Es geht darum, auszuwählen, welche Entwicklungsbereiche Ihr Projekt wirklich wertschätzen. Die Verwendung von Drittanbietermaterial beseitigt das Risiko, dass diese Komponente unvollständig / fehlerhaft / etc ist. aber es besteht das Risiko, dass es nicht so flexibel ist wie das, was Sie brauchen.
Ein anderes Beispiel wäre die Entwicklung eines kompletten Web-Forums für eine Website, wenn Sie eine Lösung für viel billiger kaufen können.
"Welche Funktionalität sollte immer ein Drittanbieter sein?"
Keine. es gibt immer eine Ausnahme oder einen Spezialfall, um die ungeheuerliche Verwendung von "immer" zu übergehen, wenn eine im Wesentlichen technische Entscheidung diskutiert wird.
Außerdem sollte die Entscheidung, sich an Dritte zu wenden, fast nie auf der Grundlage einer gegebenen "Funktionalität" getroffen werden. Es gibt keine so perfekte Bibliothek, die Sie nie irgendwo anders für diese Art von Funktionalität benötigen.
Eine dritte Partei ist eine Entscheidung, die basierend auf
getroffen werden sollteJedoch. Es gibt Dinge, bei denen es wirklich schwer ist zu glauben, dass es besser ist, ins Haus zu gehen. Zum Beispiel können Sie einen Wettbewerber in OpenGL und DirectX schreiben, und in bestimmten Anwendungen (wissenschaftliches Rechnen usw.) gibt es gute Gründe, einen solchen Pfad in Betracht zu ziehen. Aber im Allgemeinen würden Sie nicht davon träumen. Obwohl es "frei" ist, ist es immer noch eine Abhängigkeit von Drittanbietern, und Sie könnten wegen eines Fehlers, der sich nur auf die Verwendung dieser Grafiksprachen auswirkt, auf den Skids landen.
Mit anderen Worten existieren einige unglaublich komplexe oder schwer zu beweisende / getestete Dinge, die fast immer an Dritte gehen sollten. Sicherheit ist eine andere. Schreiben Sie nicht Ihren eigenen Hashalgorithmus, es sei denn, Sie sind 1) nachweislich verrückt und 2) haben mindestens 3 ausgezeichnete geschäftliche Gründe, dies zu tun.
Aber "Welche Funktionalität sollte immer ein Drittanbieter sein?" Keiner. Es gibt immer eine Ausnahme.
-Adam
Ich denke, die Antwort hängt von der Verwendung ab. Wenn Sie sich auf Profitbasis entwickeln, würden Sie wahrscheinlich Komponenten kaufen, wenn die Kosten für die Verwendung der Komponente im Vergleich zu den Kosten für die Entwicklung mehr Gewinn bringen. Dies ist insbesondere bei großen Komponenten der Fall, wenn Sie nicht über das Know-how verfügen, um diese Komponenten zu produzieren.
Ein paar gute Beispiele, die ich verwendet habe, sind die Infragistics-Controls und Dundas-Charts. Obwohl wir diese intern hätten erstellen können, wären die Kosten in Bezug auf Zeit und verlorene Chancen im Vergleich zum Kauf einiger Lizenzen sehr hoch.
Natürlich machen wir manchmal so etwas, ohne es als Kauf einer Komponente zu betrachten. Wenn Sie die Vorstellungskraft etwas erweitern, können Sie das .NET-Framework, den SQL-Server, die Windows-API usw. verwenden.
Wenn Sie es billiger kaufen können, als Sie es bauen können, und die gekaufte Funktionalität Ihren Geschäftsanforderungen entspricht, dann kaufen Sie es.
Es gibt keine definitive Antwort auf diese Frage, denn genau wie alles andere in der Softwareentwicklung hängt es von der Situation ab. Ich würde sagen, wenn die folgenden 3 Punkte wahr sind, sollten Sie nicht darüber nachdenken, es selbst zu tun ...
Diese Frage ist die Umkehrung der Frage: Welche Software sollten Sie erstellen?
Was offensichtlich dumm ist.
Für beide gibt es keine Antwort, das hängt von den Bedürfnissen Ihres Unternehmens ab. Müssen Sie eine bessere Suchmaschine für das gesamte Internet erstellen? Fast sicher nicht. Aber wenn Sie in den späten 90ern Google sind, tun Sie das. 3. vs. 1. Partei ist nur eine Frage, in welchem Büro du arbeitest, jede 3. Partei ist eine 1. Partei für sich.
Entweder kreierst du etwas minderwertige Qualität oder du verschwendest Geld und Mühe für etwas, das nicht so wichtig ist, oder beides.
Wenn Sie etwas Besseres bauen können und aus dieser besseren Sache ein Geschäft aufbauen können, dann tun Sie das!
Vergessen Sie nicht, dass die Zeit ein großes Problem ist, wenn Sie alle Dinge von Hand schreiben. Es ist nicht so, dass Sie das nicht tun, aber das Problem kommt von Ihren Kunden oder Unternehmen, die immer den schnellsten Weg finden wollen System. Aber wenn Sie ein gemeinnütziges Projekt haben, können Sie versuchen, Dinge selbst zu bauen. Beispielsweise können Sie JQuery oder Dojo als Ihr Ajax-Toolkit verwenden, wenn Sie Webanwendungen schreiben und einige Ajax-Funktionen festlegen möchten. Es wird Zeit brauchen, diese Dinge von Hand zu erstellen:)
Aber Sie müssen auch vorsichtig sein, wenn Sie Bibliotheken von Drittanbietern verwenden, Sie müssen ihnen vertrauen, weil sie bösartigen Code enthalten können, oder sie sind sehr schlecht geschrieben und können Ihnen Kopfschmerzen bereiten.
Ihre eigene Verschlüsselungsfunktion? Denken Sie nicht einmal darüber nach, aber ich denke, Sie haben wahrscheinlich eine Art Wrapper für bestehende Funktionen gemeint.
Vorteile für Drittanbieterkomponenten:
Viel Funktionalität
Vollständig getestet (hoffentlich!)
Nimmt sich Zeit um sich zu entwickeln, kann also billiger sein (aber ..)
Nachteile
Ist es wirklich flexibel genug für die nächste akward Kundenanforderung?
Verteilung kann teuer sein
Verbindet Sie mit einer Drittfirma, was ein Problem sein kann, wenn sie eine neue Version erstellen, um Fehler zu beheben
Du lernst nicht, die Aufgabe selbst zu erledigen
Ob Sie eine Drittanbieterkomponente verwenden, hängt von Ihrer Anwendung und den Anforderungen ab. Etwas wie das Zeichnen von Graphiken wird ewig dauern, um richtig zu sein, also wäre es eine gute Komponente von Drittanbietern, die man verwenden könnte.
Alles, was außerhalb Ihres Kerngeschäfts liegt, ist ein guter Kandidat für Lösungen von Drittanbietern. Sie möchten Ihre Entwicklungszeit damit verbringen, diese Kernfunktionalität zu entwickeln, die einzigartig (ish) ist und nicht in einem kosteneffektiven Gut erworben und verwendet werden kann.
Betrachten wir zum Beispiel die Web-Gridview-Kontrolle. Können Sie selbst eine Gridview entwickeln und erweitern? Sicher, Sie können, aber zu entwickeln, zu kodieren und testen Sie Grid-Ansicht wird X Menge an Zeit und Ressourcen zu nehmen, die Sie in Dollar übersetzen können. Jetzt haben Sie immer wiederkehrende Kosten für Support, Wartung und Fehlerbehebungen.
Jetzt können wir den willkürlichen Betrag verwenden, an den ich mich erinnere, als ich in einem Magazin über den durchschnittlichen US-Entwickler gelesen habe, der $ 40 pro Stunde einschließlich seiner Vorteile gemacht hat. Es gibt ganze Web-Control-Suites für ungefähr weitere 800 $ pro Entwicklerlizenz. Wenn Ihr Entwickler mehr als 25 Stunden für dieses eine Steuerelement ausgibt, könnten Sie eine ganze Suite gekauft und 5 Stunden integriert und getestet haben.
Nun, hoffentlich bin ich dort nicht zu verwirrend geworden, aber der allgemeine Kern ist, dass wenn du es dir selbst kaufen kannst, es wahrscheinlich Zeit und Geld sparen wird, und dich stattdessen auf Dinge konzentrierst, die du nicht selbst loswerden kannst normalerweise deine Geldmacher.
Ich würde sagen für das Schreiben von Kesselplattencode oder redundantem Code, der fast jedes Mal kopiert und eingefügt wird, sollte durch eine Bibliothek erfolgen. Validierungscode lässt mich fast immer dumme Fehler machen, weil es langweilig ist. Spring.NET ist dafür erstaunlich. Ich bin so froh, dass mein Chef mich ermutigt hat, es zu versuchen.
scheint, dass Sie alle Antworten haben, die Sie brauchen, aber ich möchte nur meine Meinung hier mit allen anderen hineinwerfen. Kunden bezahlen Sie, um Anwendungen zu erstellen, die speziell für sie arbeiten, und das ist normalerweise der Grund, warum sie zu Ihnen gehen; etwas, das sie brauchen, ist in keinem anderen Produkt auf dem Markt gefunden. Daher sollte Ihr Fokus auf der Entwicklung des spezifischen Teils liegen, den sie benötigen.
zweifellos muss Ihre Anwendung auch andere Dinge tun. Vielleicht muss es sich mit einer Datenbank verbinden oder bestimmte Zeilen verschlüsseln. Hier kommen Bibliotheken von Drittanbietern ins Spiel. Sie möchten keine Zeit verschwenden, um einen neuen Treiber für eine Datenbank zu schreiben, oder ein neues Verschlüsselungsschema, das möglicherweise Lücken aufweist, für die Sie keine Zeit zum Testen haben. Sie möchten diejenigen verwenden, die bereits existieren und umfassend getestet und optimiert wurden.
Denken Sie daran, je schneller Sie fertig sind, desto weniger müssen sie bezahlen. Das macht sie glücklich und möchte zu dir zurückkommen. Das bedeutet auch, dass Sie mehr verdienen, denn obwohl sie weniger zahlen, können Sie an mehr Projekten arbeiten, was mehr Geld bedeutet.
Abschließend sollten Sie sich auf Bibliotheken von Drittanbietern in verschiedenen Modulen verlassen.
Tags und Links estimation