Dependency Management

Dependency Management ist ein sehr wichtiges Thema in der professionellen Software-Entwicklung. Ein Entwickler möchte in der Regel das Rad nicht neu erfinden und bestehende Bibliotheken verwenden.

Beispiel: Der Entwickler muss eine Email validieren. Ein solche Aufgabe wurde schon x-mal implementiert, der Entwickler will sich Aufwand sparen und verwendet eine bestehende Bibliothek. Zudem ist die fehlerlose Implementation eines solchen Validators nicht ganz trivial. Man kann also nur Fehler machen, wenn man es selber implementiert.

Der Entwickler möchte die Abhängigkeiten zu anderen Projekten und Bibliotheken möglichst einfach verwalten können. Viele Tools bieten dafür ein zentrales Repository wobei über den Namen und die Version auf eine bestimmte Bibliothek verwiesen werden kann.

Für Justin Beckwith (2015) sind drei Punkte besonders wichtig, welches ein Dependency Management Tool können muss:

  • Repetable Builds Jeder Build muss zu jedem Zeitpunkt reproduzierbar sein.
  • Isolated Environments Jede Umgebung muss isoliert von jeder anderen Umgebung sein. Wenn an mehreren Projekten gearbeitet wird, darf eine Änderung am Tool nur Einfluss auf das entsprechende Projekt haben.
  • Conensus Es sollte nur ein Dependency-Management Tool verwendet werden. Wenn in einem Projekt mehrere unterschiedliche Verfahren eingesetzt werden, dann kann es komplex werden.

Dependency Management in Go

Leider gibt es noch kein "Standard-Tool" um in Go seine Abhängigkeiten zu verwalten. Die Sprach-Entwickler von Go schlagen eine ganze Liste von möglichen Tools vor:

https://github.com/golang/go/wiki/PackageManagementTools

Wie in vielen anderen Sprachen wird sich wohl über kurz oder lang ein Tool etablieren, welches durch Externe entwickelt wird (Java - Maven, Ivy oder PHP - Composer).

Es gibt aber Bestrebungen das Dependency-Management zu vereinheitlichen. Mehr dazu hier:

https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo/edit