W naszej pracy mamy kilka różnych aplikacji .net, które mają wiele podstawowych funkcji. Zbudowaliśmy te aplikacje przy użyciu czystej architektury n-tier, ale osiągnęliśmy ten moment, kiedy zdajemy sobie sprawę, że kilkakrotnie zaimplementowaliśmy te same funkcje. Oczywiście narusza to OSUSZANIE i chcielibyśmy to poprawić. Już teraz używamy Nuget do osiągania sukcesów w zakresie powszechnego kodu kleju (podłączanie IoC, rejestrowanie, ustawienia), ale chcielibyśmy również udostępniać nasze dane i warstwy biznesowe między wszystkimi naszymi aplikacjami. Chodzi o to, że interfejs użytkownika będzie obsługiwał tylko te części warstwy biznesowej, których faktycznie potrzebuje.
Z początku wydaje się to prostym problemem, ale ciągły rozwój może spowodować pewne pułapki i nie jesteśmy pewni, jak postępować. Powiedzmy, że tworzymy naszą Jedną warstwę biznesową, aby rządzić nimi wszystkimi. Dla zwięzłości nazywam to „Fundacją”. Przenosimy nasze aplikacje do korzystania z Fundacji i wszystko działa świetnie. Fundacja jest dystrybuowana do lekkich warstw interfejsu użytkownika za pośrednictwem nugetu, a my dobrze wyglądamy. Ale potem zaczynamy dodawać funkcje do naszych aplikacji i wpadamy w kłopoty.
Powiedzmy, że pracujemy nad Projektem A i dodajemy nową funkcję, która wymaga zmian w Foundation. Wprowadzamy zmiany w fundamencie (Foundation-A) i wypychamy je do kanału nuget jako niestabilny pakiet. Projekt A otrzymuje najnowszy pakiet nugetów i wszystko jest w porządku. Tymczasem inny programista pracuje nad Projektem B. Pobiera najnowszą Fundację z kontroli źródła, ale pobiera ją ze stabilnej gałęzi, aby nie zawierała zmian w Projekcie A. Dokonuje zmian i stworzył Foundation-B. I wszystko jest dobrze. Ale potem odkrywamy, że funkcjonalność implementacji Foundation-A i Foundation-B, która faktycznie może współdzielić kod, łączymy je. Tymczasem Foundation-C unosi się tam z własnymi zmianami. W końcu Foundation-B jest gotowa do produkcji, więc ją wypychamy. Ale potem musimy zaktualizować produkcję A, B,
Wydaje się, że to może działać, ale martwimy się pracą z różnymi schematami baz danych i utrzymywaniem synchronizacji między różnymi gałęziami repozytorium Foundation, a także repozytoriami Project A, B i C. Wygląda na to, że prawdopodobnie zajmie to dużo pracy ręcznej, co otwiera możliwość błędów. Chciałbym, aby było to jak najbardziej zautomatyzowane.
Oto stos, którego używamy: C #, TFS z Continuous Integration, Nuget. Nasze aplikacje to różnego rodzaju aplikacje ASP.NET. Jesteśmy gotowi spojrzeć na różne SCM, jeśli to ułatwi sprawę.
Szukam sposobów na utrzymanie rozsądku w Nuget dzięki różnym gałęziom kodu źródłowego. Nie chcemy przypadkowo wypchnąć kodu programistycznego do produkcji, ponieważ odwołujemy się do niewłaściwego pakietu Nuget.