Noch hat niemand das zweischneidige Schwert erwähnt, also werde ich meine 2 Cent hinzufügen. Wenn Sie mehrere Projekte haben und alle einen wiederverwendbaren Code gemeinsam haben, sollten Sie den Code gemäß den guten Programmierpraktiken / -prinzipien (z. B. DRY) an einem globalen Ort platzieren und so strukturieren, dass er von allen gemeinsam genutzt werden kann Ihre Projekte ohne Änderungen. Mit anderen Worten, definieren Sie Schnittstellen so, dass sie allgemein und allgemein genug sind, um jedem gerecht zu werden.
Hierfür gibt es nur wenige Optionen: 1) Erstellen Sie ein Basisprojekt, von dem andere abhängig sind. Dieses Projekt kann eine binäre Verteilung erstellen, die andere Projekte verwenden. 2) Ziehen Sie ein Open-Source-Modell in Ihre Organisation. Lassen Sie gemeinsamen Code einen eigenen Codezweig sein und lassen Sie andere Projekte Code auf dieselbe Weise abrufen, wie Sie Quellcode von jedem OSS online übernehmen würden.
Hier kommt das Schwert ins Spiel ...
Das Platzieren von Code an einem gemeinsamen Ort, von dem andere Projekte / Personen abhängen, kann ziemlich teuer werden. Angenommen, Sie haben einen Code und 4 andere Projekte hängen davon ab. Einer Ihrer Kunden, der Projekt A verwendet, findet einen Fehler und Sie müssen eine Korrektur vornehmen. Sie beeilen sich und der Kunde ist zufrieden. Sie haben jedoch gerade Code geändert, von dem 3 andere Projekte abhängen. Haben Sie alle erneut getestet, um sicherzustellen, dass keine Randbedingungen eingeführt wurden?
Allgemeiner Code muss auch viel sorgfältiger erstellt werden, und die Modulschnittstellen müssen viel besser gestaltet sein, da dieser Code nicht nur einen, sondern vier Clients aufnehmen darf und jeder von ihnen diesen Code möglicherweise nur mit einem ganz geringen Unterschied verwendet.
Wenn sich Ihre Projekte in unterschiedlichen Release-Zyklen befinden, müssen Sie beim Verwalten des gemeinsamen Codes noch vorsichtiger sein. Sie können nicht einfach Änderungen am allgemeinen Code vornehmen, da Projekt B neue Funktionen benötigt, wenn Sie 3 Tage vor dem Ausschneiden des endgültigen Bilds für Projekt C sind.
Ich sage nicht, dass eine gemeinsame Bibliothek nicht die richtige Lösung ist. Ich bin ein starker Befürworter von DRY und habe zuvor gemeinsamen Code erstellt und unterstützt und tue dies auch weiterhin. Ich wollte nur sagen, dass das einfache Erstellen von Code seine eigenen Kosten hat.
Wenn Sie der einzige sind, der diesen Code wiederverwendet, ist dies nicht so schlimm. Wenn Sie ein Team von Ingenieuren haben, die den gemeinsamen Code verwenden, steigen die Kosten noch weiter an. Wenn andere beteiligt sind, sollten Sie damit rechnen, dass das Platzieren von Code in einer gemeinsamen Bibliothek dreimal so lange dauert, bis ein Punkt erreicht ist, an dem Sie glauben, dass er "vollständig" ist. Sie müssen a) die Bibliothek robuster machen, um sie vor allen Arten von Randbedingungen und ungültiger Nutzung zu schützen, b) Dokumentation bereitstellen, damit andere die Bibliothek verwenden können, und c) anderen Personen beim Debuggen helfen, wenn sie die Bibliothek auf eine von Ihnen verwendete Weise verwenden nicht erwartet und Ihre Dokumentation deckte nicht ihren spezifischen Anwendungsfall ab.
Einige Vorschläge, die ich anbieten kann:
- Gemeinsamer Code, der durch automatisierte Komponententests abgedeckt wird, kann viel bewirken und Ihnen die Gewissheit geben, dass Sie bei einer Änderung nicht nur ein anderes Projekt abgebrochen haben.
- Ich würde nur sehr stabile Funktionen in gemeinsamen Code einfügen. Wenn Sie letztes Jahr eine Klasse für Timer-Management geschrieben haben und diese seit 9 Monaten nicht mehr geändert haben und jetzt 3 andere Projekte haben, die Timer benötigen, dann ist das sicher ein guter Kandidat. Aber wenn Sie letzte Woche etwas geschrieben haben, haben Sie nicht so viele Optionen (und ich hasse es, Code zu kopieren / einzufügen, wahrscheinlich mehr als der nächste), aber ich würde zweimal darüber nachdenken, es allgemein zu machen.
- Wenn ein Teil des Codes trivial ist, Sie ihn jedoch an mehreren Stellen verwendet haben, ist es möglicherweise besser, in die Kugel zu beißen, DRY in Ruhe zu lassen und mehrere Kopien am Leben zu lassen.
- Manchmal lohnt es sich, nicht einfach gemeinsamen Code an einem gemeinsamen Ort abzulegen und alle darauf verweisen zu lassen. Behandeln Sie den allgemeinen Code jedoch lieber als seinen eigenen, der mit Versionen, Veröffentlichungsdaten und allem freigebbar ist. Auf diese Weise kann Projekt C sagen: "Ich verwende die allgemeine Bibliothek v1.3". Wenn Projekt D neue Funktionen benötigt, lassen Sie v1.3 in Ruhe, Release v1.4 und Projekt C wird nicht beeinträchtigt. Denken Sie daran, es ist VIEL, VIEL teurer, gemeinsamen Code als eigenes Produkt zu behandeln, als ihn einfach an einem gemeinsamen Ort einchecken zu lassen.