Das Team, dem ich angehöre, erstellt Komponenten, die von den Partnern des Unternehmens zur Integration in unsere Plattform verwendet werden können.
Daher stimme ich zu, dass wir beim Einführen von Abhängigkeiten (von Drittanbietern) äußerste Vorsicht walten lassen sollten. Derzeit bestehen keine Abhängigkeiten von Drittanbietern und wir müssen auf der niedrigsten API-Ebene des Frameworks bleiben.
Einige Beispiele:
- Wir sind gezwungen, auf der niedrigsten API-Ebene des Frameworks (.NET Standard) zu bleiben. Der Grund dafür ist, dass eines Tages eine neue Plattform auf den Markt kommen könnte, die nur dieses sehr niedrige API-Level unterstützt.
- Wir haben unsere eigenen Komponenten für die (De-) Serialisierung von JSON implementiert und sind dabei, dies auch für JWT zu tun. Dies ist auf einer höheren Ebene der Framework-API verfügbar.
- Wir haben einen Wrapper um das HTTP-Framework der Standardbibliothek implementiert, da wir keine Abhängigkeit von der HTTP-Implementierung der Standardbibliothek eingehen möchten.
- Der gesamte Code für die Zuordnung zu / von XML wurde aus demselben Grund "von Hand" geschrieben.
Ich glaube, wir gehen zu weit. Ich frage mich, wie ich damit umgehen soll, da dies meiner Meinung nach unsere Geschwindigkeit stark beeinflusst.
Antworten:
Dies unterstreicht für mich die Tatsache, dass Sie sich möglicherweise nicht nur zu sehr einschränken, sondern auch mit Ihrem Ansatz auf einen bösen Sturz zusteuern.
.NET Standard ist nicht die " niedrigste API-Ebene des Frameworks " und wird es auch nie sein . Der restriktivste Satz von APIs für .NET wird durch Erstellen einer portablen Klassenbibliothek erreicht, die auf Windows Phone und Silverlight abzielt.
Je nachdem, auf welche Version von .NET Standard Sie abzielen, können Sie eine Vielzahl von APIs erhalten, die mit .NET Framework, .NET Core , Mono und Xamarin kompatibel sind . Und es gibt viele Bibliotheken von Drittanbietern, die mit .NET Standard kompatibel sind und daher auf allen diesen Plattformen funktionieren.
Dann gibt es .NET Standard 2.1, der voraussichtlich im Herbst 2019 veröffentlicht wird. Es wird von .NET Core, Mono und Xamarin unterstützt. Zumindest für die absehbare Zukunft wird es von keiner Version von .NET Framework unterstützt, und dies ist mit hoher Wahrscheinlichkeit immer der Fall . In naher Zukunft wird .NET Standard also nicht die " niedrigste API-Ebene des Frameworks " sein, sondern das Framework ablösen und APIs haben, die von diesem nicht unterstützt werden.
Seien Sie also sehr vorsichtig mit " Der Grund dafür ist, dass eines Tages eine neue Plattform auf den Markt kommen könnte, die nur diese sehr niedrige API-Ebene unterstützt ", da es sehr wahrscheinlich ist, dass neue Plattformen tatsächlich eine höhere API-Ebene unterstützen als das alte Framework.
Dann gibt es das Problem der Bibliotheken von Drittanbietern. JSON.NET ist zum Beispiel mit .NET Standard kompatibel. Es ist garantiert, dass jede mit .NET Standard kompatible Bibliothek in Bezug auf die API mit allen .NET-Implementierungen funktioniert, die mit dieser Version von .NET Standard kompatibel sind. Sie erreichen also keine zusätzliche Kompatibilität, indem Sie es nicht verwenden und Ihre JSON-Bibliothek erstellen. Sie schaffen sich einfach mehr Arbeit und verursachen Ihrem Unternehmen unnötige Kosten.
Also ja, Sie gehen meiner Ansicht nach definitiv zu weit.
quelle
eval
Hülle mit einigen Hygienekontrollen, die leicht umgangen werden können?Die Argumentation hier ist eher rückständig. Ältere, niedrigere API-Level werden mit größerer Wahrscheinlichkeit veraltet und werden nicht mehr unterstützt als neuere. Ich stimme zu, dass es sinnvoll ist, einen komfortablen Weg hinter der "Schneide" zu finden, um ein angemessenes Maß an Kompatibilität in dem von Ihnen genannten Szenario zu gewährleisten.
Das ist Wahnsinn . Auch wenn Sie aus irgendeinem Grund keine Standardbibliotheksfunktionen verwenden möchten, gibt es Open Source-Bibliotheken mit kommerziell kompatiblen Lizenzen, die alle oben genannten Funktionen ausführen. Sie wurden bereits geschrieben, ausführlich im Hinblick auf Funktionalität, Sicherheit und API-Design getestet und in vielen anderen Projekten ausführlich verwendet.
Wenn das Schlimmste passiert und das Projekt verschwindet oder nicht mehr gewartet wird, haben Sie den Code, um die Bibliothek trotzdem zu erstellen, und Sie weisen jemanden an, der sie wartet. Und Sie sind wahrscheinlich immer noch in einer viel besseren Position als Sie selbst, da Sie in Wirklichkeit mehr getesteten, saubereren und besser wartbaren Code haben, um den Sie sich kümmern müssen.
In dem viel wahrscheinlicherem Szenario, dass das Projekt beibehalten wird und Fehler oder Exploits in diesen Bibliotheken gefunden werden, wissen Sie Bescheid, damit Sie etwas dagegen tun können - z. B. ein kostenloses Upgrade auf eine neuere Version oder das Patchen Ihrer Version mit dem Update, wenn Sie eine Kopie genommen haben.
quelle
Im Großen und Ganzen sind diese Dinge gut für Ihre Kunden. Sogar eine populäre Open-Source-Bibliothek könnte aus irgendeinem Grund für sie unmöglich sein.
Beispielsweise haben sie möglicherweise einen Vertrag mit ihren Kunden geschlossen, in dem sie versprechen, keine Open-Source-Produkte zu verwenden.
Sie weisen jedoch darauf hin, dass diese Funktionen nicht kostenlos sind.
Ich würde diese Nachteile ansprechen und mit Kunden sprechen, um herauszufinden, ob sie wirklich die von Ihnen angebotenen extremen Kompatibilitätsniveaus benötigen.
Wenn beispielsweise alle Kunden Json.NET bereits verwenden, wird es durch die Verwendung in Ihrem Produkt und nicht in Ihrem eigenen Deserialisierungscode verkleinert und verbessert.
Wenn Sie eine zweite Version Ihres Produkts einführen, die sowohl Bibliotheken von Drittanbietern als auch kompatible verwendet, können Sie die Akzeptanz bei beiden beurteilen. Werden Kunden die Drittanbieter nutzen, um die neuesten Funktionen etwas früher zu erhalten, oder sich an die "kompatible" Version halten?
quelle
Die kurze Antwort lautet, dass Sie damit beginnen sollten, Abhängigkeiten von Drittanbietern einzuführen. Erklären Sie bei Ihrem nächsten Stand-up-Meeting allen, dass die nächste Arbeitswoche der größte Spaß sein wird, den sie seit Jahren hatten. Sie werden die JSON- und XML-Komponenten durch Open-Source-Standardbibliothekslösungen ersetzen. Sagen Sie allen, dass sie drei Tage Zeit haben, um die JSON-Komponente zu ersetzen. Feiern, nachdem es fertig ist. Eine Party feiern. Das ist es wert, gefeiert zu werden.
quelle
Im Grunde kommt es auf Aufwand und Risiko an.
Indem Sie eine zusätzliche Abhängigkeit hinzufügen oder Ihr Framework aktualisieren oder eine API höherer Ebene verwenden, senken Sie Ihren Aufwand, gehen jedoch Risiken ein. Daher würde ich vorschlagen, eine SWOT-Analyse durchzuführen .
Wie Sie sehen, ist der zusätzliche Aufwand für die Entwicklung einer handgefertigten Lösung eine Investition in die Reduzierung Ihrer Bedrohungen. Jetzt können Sie eine strategische Entscheidung treffen.
quelle
Teilen Sie Ihre Komponentenbibliotheken in einen "Core" -Satz auf, der keine Abhängigkeiten aufweist (im Wesentlichen das, was Sie gerade tun), und einen "Common" -Satz, der Abhängigkeiten von Ihren "Core" -Bibliotheken und Bibliotheken von Drittanbietern aufweist.
Auf diese Weise kann jemand, der nur "Core" -Funktionalität haben möchte, diese haben.
Wenn jemand "Common" -Funktionalität will, kann er sie haben.
Und Sie können verwalten, was "Core" im Vergleich zu "Common" ist. Sie können "Common" schneller um Funktionen erweitern und in Ihre eigene "Core" -Implementierung verschieben, wenn es sinnvoll ist, Ihre eigene Implementierung bereitzustellen.
quelle