Organisation und Verwaltung vieler Projekte

  • Allgemein

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Organisation und Verwaltung vieler Projekte

    Hallo ihr lieben Leute, hätte da mal eine Frage, bezüglich Solutions, Projekten und Git-Repos.

    Ich habe hier eine Solution, in der befinden sich, historisch bedingt, 34 Projekte, allesamt Bibliotheken, wobei manche Projekte quasi dreimal vorkommen. Falls ihr euch fragt, "wieso?", das liegt daran, dass wir eine Hauptanwendung haben, die noch in .NET 4 Entwickelt wird, es aber bereits Tools gibt, die mit .NET 4.5 Entwickelt wurden und ich natürlich von async/await und anderen Sachen gebrauch machen wollte, und dann gibt es noch eine Xamarin App, die dann natürlich .NET Standard 2.0 erfordet für Bibliotheken.

    Die eigentlichen Code-Dateien liegen nur in den .NET 4 Projekten, in den anderen Projekten sind sie verlinkt, und mithilfe von Kompilersymbolen, schalte ich features für die jeweilige .NET Version ein und aus. Natürlich gibt es innerhalb der Bibliotheken verweise untereinander.

    Nun zur eigentlichen Frage. Ich bin dabei das ganze neu aufzusetzen, da die Hauptanwendung einen kompletten Re-write bekommt, der in .NET 6 stattfinden wird. Dadurch werden die alten .NET 4 und .NET 4.5 Bibliotheken nicht mehr benötigt, sodass nur noch die .NET Standard Libraries übrig bleiben. Jetzt stellt sich aber die Frage, hauptsächlich aus organisatorischen, und Versionierungsgründen, wie ich das aufziehe.

    Wie bereits gesagt, liegen im moment 34 Projekte in einer Solution, von denen ich jetzt jedoch nur noch 12 benötige. Das ist zwar nett, da ich dadurch schön kleine DLLs hab, die sich einzeln, oder je nach gebrauch eben einbinden lassen, jedoch befindet sich alles in einem Git-Repo, und ich würde am liebsten jedem Projekt seine eigene Version geben, was jedoch in Git mit tausenden labels enden wird, da ich für jedes der 12 Projekte eigene Versionslabel bräuchte.

    Dann habe ich mir überlegt, dass ich ja evtl. jedes Projekt seine eigene Solution geben könnte, sodass jedes Projekt sein eigenes Git-Repo hat, jedoch finde ich das wieder unübersichtlich, da ich nun 12 verschiedene Repos pfelegen muss.

    Zuletzt, und das habe ich mal testweise umgesetzt, habe ich die 12 Projekte in einem vereint, sodass ich nur noch ein Repo, mit einer Solution, und einem Projekt, und somit auch nur einer Version habe. Das ist zwar organisatorisch ein Träumchen, jedoch sehe ich hier wiederum das Problem, das man nun nurnoch eine "fette" Bibliothek hat, die man einbinden muss, egal welchen Teil man davon nun benötigt. Zudem, wenn man nun diese Bibliothek einbindet, und versehentlich auf einen Teil zugreift, ohne die nötigen Dependencies einzubinden (Bspw. Datenbankprovider), endet das erstmal in einer schönen Exception.

    Was denkt ihr ist hier der beste Ansatz? Habt ihr noch weitere Ideen?
    Hallo

    Ich kann hier nur meine persönliche Meinung kundtun, das bedeutet nicht das dies für jeden der beste Weg ist und sollte auch auf ein Projekt bezogen werden.

    Von einem "Monoliten" würde ich mal komplett weggehen.
    Obs nun viele GIT-Repos sind oder nicht, ich persönlich mache es am liebsten so das ich ALLE Teile die ich mehrmals benötige immer als extra Repo erstelle und automatisiert die NuGet-Pakete erstelle.
    In jeder Anwendung kan ich dann entscheiden welche NugetVersion ich verwenden will bzw. bekomme sofort die Meldung das es ein update der Bibliothek gibt.

    Für "Teile" die es nur für ein gewisses Programm geben soll/nur für dieses Sinn macht spricht nichts (aus meiner sicht) dagegen wenn diese Teile in der selben Solution und folglich im selben Repo sind.
    Aber eben alles was ich unabhängig Releasen will oder unabhängig Versionieren will das verwalte ich extra. Egal wieviele Repos das werden würden. aber wie gesagt, nur meine Meinung. Was sowas betrifft gibts vermutlich mehr Meinungen wie Corona-Positiv getestete.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich würde die Solution in ein Git haben wollen.
    Bei den Projekten muss man Architektonisch überlegen, obs eine Anwendung ist oder ein Utility-Projekt.
    Utility-Projekte sind so zu designen, dass sie in verschiedenen Anwendungen wiederverwendbar sind.
    Utilities können sich auch gegenseitig referenzieren - ich hab etwa
    UtilsGeneral mit Basis-Sachen
    UtilsWinForms mit Winforms-Sachen
    UtilsWpf - da kommst du nie drauf, wofür das gut ist.
    UtilsGeneral ist überall verwiesen, in allen Anwendungen, und auch in UtilsWinForms und UtilsWpf.
    Es hat also die breiteste Wiederverwendbarkeit - ist aber natürlih nicht so mächtig wie die anneren Utils.

    Bei uns auf Arbeit ist das denen nicht verteilt genug. Da gibts Bestrebungen, einen eigenen Nuget-Server aufzusetzen.
    Weil bei der vorher skizzierten Mono-Solution besteht der Nachteil, wenn ein Util weiterentwickelt wird, wird es zwangsläufig in allen Anwendungen referenziert.
    Hätte man da einen Nuget dazwischen, könnte man mit der Übernahme einer Util-Weiterentwicklung in die eigene Anwendung auch erstmal zuwarten, wenn wolle.

    @Nofear23m:
    Hat das nicht grosses Potential für ein heilloses Kuddelmuddel, wenn man, um etwas lauffähig auschecken zu wollen, mehrere Repos konsultieren muss?
    Das finde ich so nett am Mono-Git: Alles aus einer Hand, und was man holt, passt dann auch zusammen (so isses jdfs. gedacht).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    Hätte man da einen Nuget dazwischen, könnte man mit der Übernahme einer Util-Weiterentwicklung in die eigene Anwendung auch erstmal zuwarten, wenn wolle.

    Das geht übrigens auch richtig gut mit Git Submodules: Da kann man ein anderes Repo als Teil des aktuellen einbinden und das unabhängig in das Repo "pullen". Der genutzte Stand von jedem Submodule wird als Teil des Repos, in dem die Submodules eingebunden sind, festgehalten - also auch beim neu Klonen wird die richtige Version wieder genommen.

    ErfinderDesRades schrieb:

    Hat das nicht grosses Potential für ein heilloses Kuddelmuddel, wenn man, um etwas lauffähig auschecken zu wollen, mehrere Repos konsultieren muss?
    Das finde ich so nett am Mono-Git: Alles aus einer Hand, und was man holt, passt dann auch zusammen (so isses jdfs. gedacht).

    Bitte nochmal lesen. Wenn alles was (wie ich geschrieben habe) unabhängig vom Projekt ist wozu? alles was unabhängig ist hätte ich in einem eigenen Repo.

    Warum muss ich da alles auschecken?
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##