In unserer Arbeit haben wir verschiedene .net-Anwendungen, die viele Basisfunktionen gemeinsam haben. Wir haben diese Anwendungen mit einer sauberen n-Tier-Architektur erstellt, aber wir haben den Moment erreicht, in dem wir feststellen, dass wir dieselben Funktionen mehrmals neu implementiert haben. Offensichtlich verletzt dies DRY und wir möchten das korrigieren. Wir verwenden Nuget bereits mit einigen Erfolgen für gängigen Klebercode (Verkabelung von IoC, Protokollierung, Einstellungen), möchten jedoch auch unsere Daten- und Geschäftsschichten für alle unsere Anwendungen freigeben. Die Idee ist, dass sich die Benutzeroberfläche nur mit den Teilen der Business-Schicht befasst, die sie tatsächlich benötigt.
Dies scheint zunächst ein einfaches Problem zu sein, aber die Weiterentwicklung könnte einige Fallstricke mit sich bringen, und wir sind uns nicht sicher, wie wir vorgehen sollen. Nehmen wir an, wir machen unsere One Business Layer, um sie alle zu regieren. Der Kürze halber nenne ich es "Foundation". Wir portieren unsere Anwendungen, um die Foundation zu nutzen, und alles läuft großartig. Die Foundation wird über Nuget an Light-UI-Layer verteilt, und wir sehen gut aus. Aber dann erweitern wir unsere Anwendungen um Funktionen, und es treten Probleme auf.
Angenommen, wir arbeiten an Projekt A und fügen eine neue Funktion hinzu, die Änderungen an Foundation erfordert. Wir nehmen die Änderungen an Foundation (Foundation-A) vor und leiten sie als instabiles Paket an den Nuget-Feed weiter. Projekt A erhält das neueste Nuget-Paket und alles ist gut. In der Zwischenzeit arbeitet ein anderer Entwickler an Projekt B. Er erhält die neueste Foundation aus der Quellcodeverwaltung, bezieht sie jedoch aus einem stabilen Zweig, sodass dort keine Änderungen an Projekt A vorgenommen werden. Er nimmt Änderungen vor und gründet Foundation-B. Und alles ist gut. Dann stellen wir jedoch fest, dass die Implementierungsfunktionen von Foundation-A und Foundation-B tatsächlich Code gemeinsam nutzen können. Deshalb kombinieren wir sie. In der Zwischenzeit schwebt Foundation-C mit seinen eigenen Änderungen da draußen. Schließlich ist Foundation-B für die Produktion bereit, und wir bringen es heraus. Aber dann müssen wir Produktion A, B aktualisieren,
Dies scheint möglich zu sein, aber wir sind besorgt darüber, dass wir mit verschiedenen Datenbankschemata arbeiten und alles zwischen den verschiedenen Zweigen des Foundation-Repository sowie den Projekt-A-, B- und C-Repositorys synchronisieren müssen. Es scheint, als würde es wahrscheinlich viel Handarbeit erfordern, was die Möglichkeit von Fehlern eröffnet. Ich möchte dies so automatisiert wie möglich.
Hier ist der Stack, den wir verwenden: C #, TFS mit Continuous Integration, Nuget. Unsere Anwendungen sind alle verschiedenen Arten von ASP.NET-Anwendungen. Wir sind bereit, uns verschiedene SCMs anzuschauen, wenn dies die Dinge einfacher macht.
Ich suche nach Wegen, um Nuget mit unseren verschiedenen Quellcode-Zweigen auf dem Laufenden zu halten. Wir möchten nicht versehentlich Entwicklungscode in die Produktion bringen, da wir auf das falsche Nuget-Paket verweisen.