2012-06-05 22 views
27

Nasz zespół chce wykorzystać Team Foundation Server v.11 (2012) do zarządzania naszymi projektami. Obecnie zarządzamy projektem w arkuszach kalkulacyjnych. Nasz zespół opracowuje oprogramowanie wyłącznie dla klientów wewnętrznych i jest dużo dll między projektami. Używamy także SVN do kontroli wersji kodu źródłowego.Projekt TFS z wieloma rozwiązaniami Visual Studio

Mamy Rozwiązania dla różnych części naszych aplikacji: Wspólna Biblioteka, Biblioteki Aplikacji (reguły biznesowe itp. Oto, co nasza struktura SVN wygląda

SVN 
    -CommonLibrary (VS Solution) 
     -Source 
      -CommonLibrary.Core (VS Project) 
      -CommonLibrary.Security (VS Project) 
      -CommonLibrary.Web (VS Project) 
    -OurCompanyLibrary (VS Solution) 
     -Libraries (Projects within this solution reference these) 
      -CommonLibrary.Core.dll 
      -CommonLibrary.Security.dll 
     -Source 
      -OurCompanyLibrary.Application1 (VS Project) 
      -... 
      -OurCompanyLibrary.ApplicationN (VS Project) 
    -OurCompanyIntranet (VS Solution) (MVC framework) 
     -Libraries (Projects within this solution reference these) 
      -CommonLibrary.Core.dll 
      -CommonLibrary.Security.dll 
      -CommonLibrary.Web.dll 
      -OurCompanyLibrary.Application1.dll 
     -Source 
      -OurCompanyIntranet.Application1 (VS Class Library Project) 
      -... 
      -OurCompanyIntranet.ApplicationN (VS Class Library Project) 
      OurCompanyIntranet.UI (VS Web Project) 
    -OurCompanyInternet (VS Solution) (MVC framework) 
     -Libraries (Projects within this solution reference these) 
      -CommonLibrary.Core.dll 
      -CommonLibrary.Security.dll 
      -CommonLibrary.Web.dll 
      -OurCompanyLibrary.Application1.dll 
     -Source 
      -OurCompanyInternet.Application1 (VS Class Library Project) 
      -... 
      -OurCompanyInternet.ApplicationN (VS Class Library Project) 
      -OurCompanyInternet.UI (VS Web Project) 

Powodem podziału kodu na wiele rozwiązań, dlatego możemy ponownie użyć biblioteki aplikacji w różnych sytuacjach (aplikacje Intranet, aplikacje internetowe, aplikacje winform). Ponadto rozwiązania intranetowe i internetowe zawierają wiele aplikacji. To jest nasza obecna struktura. Nie jestem pewien, czy to najlepsza struktura organizacyjna, ale działa dla nas.

Problem z przełączeniem na TFS polega na tym, że jeden projekt zespołowy nie może zawierać części w wielu rozwiązaniach VS. Na przykład utworzymy projekt zespołu TFS dla aplikacji 1, abyśmy mogli mieć zaległe produkty dla tej aplikacji. Aplikacja 1 wymaga zmian w OurCompanyLibrary, OurCompanyIntranet i OurCompanyInternet, aby ukończyć aplikację, ale przy użyciu TFS będzie tylko jedno rozwiązanie VS dla aplikacji1.

Oto przykład, w jaki sposób tworzymy aplikację. Cały model domeny i reguły biznesowe są przechowywane w rozwiązaniu VS Our Library VS. Kiedy tworzymy aplikację, nazywamy ją Application1, najpierw rozpoczynamy tworzenie modelu domeny i reguł biznesowych w projekcie OurCompanyLibrary.Application1 VS w ramach rozwiązania VS OurCompanyLibrary. Po opracowaniu modelu domeny przechodzimy do programowania strony interfejsu użytkownika w usługach OurCompanyIntranet i OurCompanyInternet VS Solutions. Rozwiązania te są witryną w stylu MVC. OurCompanyIntranet zawiera projekt Web VS OurCompanyIntranet.UI, który zawiera wszystkie widoki (pliki .aspx), css, javasciprt itp. OurCompanyIntranet zawiera również wszystkie modele i kontrolery oddzielone przez aplikację (w tym przypadku OurCompanyIntranet.Application1). Zorganizowanie tego w TFS staje się problemem, ponieważ chcemy Team Project for Application1, ale ta aplikacja może obejmować wiele rozwiązań i nie chcemy mieć duplikatów wszędzie, dodając ten sam OurCompanyIntranet i OurCompanyInternet VS Solutions do kontroli źródła.

Jak zorganizowałbyś to w TFS? Czy istnieje inny sposób, w jaki powinniśmy zorganizować naszą strukturę kodu, która miałaby więcej sensu? Wszelkie artykuły lub strony, które prowadzą nas we właściwym kierunku, bardzo by pomogły.

Odpowiedz

43

Po pierwsze, nie należy korzystać z wielu zespół projektowy, to jest ogromny błąd, który wszyscy popełnili na początku. Dla wielkości Twojego zespołu i tego, co rozwijasz: jeden projekt zespołowy jest tym, czego potrzebujesz.

Korzystasz z dwóch projektów zespołowych, gdy istnieją dwa zespoły całkowicie różnych ludzi, pracujących nad zupełnie innym projektem, z całkowicie inną metodologią/procesem.

Z jednej Zespół projektowy można jeszcze:

  • mają wiele oddziałów (związanych lub nie).
  • Administracja kontrolą źródła na najmniejszym poziomie:
  • Podziel swój projekt na podkategorie (funkcjonalne, techniczne, cokolwiek potrzebujesz), używając ścieżki obszaru (która jest drzewem węzła) elementu roboczego. W ten sposób możesz mieć jeden duży backlog produktu lub dedykowany.
  • Ogólne raporty dotyczące całego projektu lub konkretnego obszaru (nadal używającego ścieżki obszaru, ale w usługach Reporting Services)
  • Zaufaj mi, to najlepszy sposób na to, aby przejść, a wiele osób (w tym mnie za pierwszym razem) robi błąd polegający na używaniu wielu projektów zespołowych i zapłaceniu za to ceny. Potrzebna jest dobra hierarchiczna struktura Kontroli Źródła i dobre Drzewo Ścieżki Obszaru.

Odnośnie Solutions:

mających jedno rozwiązanie za główny składnik projektu nie jest złe, programiści mogą pracować na dedykowanym podzbioru projektu, aby zmaksymalizować wydajność i zmniejszyć sprzężenie pomiędzy komponentami.

Ale nadal możesz mieć jedno globalne rozwiązanie, które odwołuje się do wszystkich twoich projektów i które będzie używane, gdy będziesz potrzebować zmian, które wpłyną na cały twój projekt. Posiadanie globalnego rozwiązania to także prosty sposób na bezproblemowe zbudowanie całego projektu.

Chodzi tu o odsyłaczy składowych, jeśli jeden składnik rozwijać (np Application1) potrzebuje inny składnik rozwijać (np OurCompanyLibrary), a następnie tworzy zależność między obu i Application1 musi odwoływać „zbudowany zespoły” z OurCompanyLibrary .

Które oznacza albo:

  1. Musisz utworzyć miejsce gdzieś w kontroli źródła do przechowywania wbudowanych zestawów wszystkich elementów, które będą się odwoływać przez innych. Utrzymaj cykl budowy, aby wydać wszystko, co dotyczy właściwej kolejności.

  2. Skorzystaj z nowego standardu, którym jest Nuget i skonfiguruj wewnętrzny serwer Nuget (bardzo łatwy w obsłudze) i stwórz własne pakiety Nuget dla komponentów, które będą odwoływać się do innych.

  3. Najprostszym sposobem jest uwzględnienie wszystkich zależności opracowanych wewnętrznie w rozwiązaniu, aby upewnić się, że są budowane w razie potrzeby. Łatwo to zrobić, ale twój projekt Application1 będzie zawierał większość twoich projektów VS. Nie mówię, że to dobra lub zła droga, to twoje wezwanie. Czasami prosta droga jest najlepsza.

Każdy sposób ma swoje wady/zalety i tylko Ty możesz zdecydować, który z nich najlepiej wybrać.

+0

Jak obsługiwałbyś wersje zespołów? Nasza strategia polega na udostępnianiu wspólnego pliku informacji o montażu dla rozwiązania, więc OurCompanyLibrary będzie mieć inną wersję niż CommonLibrary i tak dalej. Czy masz teraz tylko jedną wersję zespołu dla całego projektu zespołu? Rozumiem, że możesz mieć różne numery wersji, ale czy jest to najlepszy sposób na zrobienie tego lub najlepszy sposób na uzyskanie jednego numeru wersji dla całego projektu zespołu? – awilinsk

+0

Jeśli produkt końcowy jest monolityczny, wszystkie zestawy mogą mieć ten sam numer wersji, a ten numer będzie używany do rozróżniania dwóch różnych wersji produktu. Załóżmy teraz, że opracowujesz dwa produkty (na przykład dwie niepowiązane strony internetowe) oparte na tym samym komponencie (zespoły podstawowe/biznesowe firmy), a wersjonowanie zestawów ma tutaj inne znaczenie, ponieważ te dwie witryny mogą wykorzystywać inną wersję zestawów podstawowych/biznesowych i możesz mieć inny cykl rozwoju dla trzech z nich (core/business, site 1, site2). Jeśli wszystko jest monolityczne, nie przejmuj się. – Nock

+0

Dzięki za poradę. To nie jest monolityczne. Mamy dwie różne strony internetowe, które nie korzystają z tych samych zestawów biznesowych, ale intranet korzysta z tych samych zestawów biznesowych, co witryny publiczne.Myślę, że miałbym różne wersje dla każdej witryny i biblioteki. Jak rozgałęziałbyś się na takie rzeczy? Czy powinienem mieć gałąź główną i deweloperską jak zwykle, a następnie gałąź wydania dla każdej z różnych stron? – awilinsk

0

Jak można przewidzieć, to: -

OurCompanyLibrary byłoby VS rozwiązanie.

OurCompanyLibrary.Application1 ... OurCompanyLibrary.ApplicationN będzie projektami VS w ramach tego rozwiązania.

OurCompanyLibrary.ApplicationX.dlls będą odniesienia w OurCompanyIntranet i OurCompanyInternet VS Solutions.

Nie jestem pewien, czy rozumiem twój problem.

Projekt aplikacji VS w bibliotece OurCompanyLibrary byłby osobno przeznaczony do budowania, tworząc własną bibliotekę dll, która mogłaby być następnie przywołana w dwóch pozostałych rozwiązaniach. Jeśli problem polega na tym, że wszystkie aplikacje znajdują się w jednym projekcie zespołu VS (OurCompanyLibrary), odpowiedzią byłoby utworzenie osobnego projektu zespołu VS dla każdej aplikacji - OurCompanyLibrary1 dla aplikacji 1, OurCompanyLibrary2 dla aplikacji2 itp. Rozwój każdej aplikacji jest całkowicie niezależny od innych.

Jeśli problem polega na tym, że chcesz różnych części źródła w różnych rozwiązaniach, można to osiągnąć, dodając projekt do rozwiązania. Oznacza to, że wszystkie te rozwiązania mają cały kod źródłowy. Mamy coś podobnego, gdzie pracuję: - Mamy rozwiązanie, które ma 2 projekty - naszą wspólną warstwę logiki biznesowej i naszą wspólną warstwę dostępu do danych. Każde z naszych innych rozwiązań obejmuje te projekty. Oznacza to, że możemy edytować kod źródłowy z dowolnego rozwiązania.

Nie wiem, czy to pomoże, ale powodzenia!

+0

Dziękuję bardzo za odpowiedź. Problem w tym, że jedna aplikacja (która byłaby jego własnym projektem zespołowym) obejmuje wiele rozwiązań VS, a te rozwiązania VS będą musiały zostać dodane do każdego projektu zespołowego. Rozwiązanie OurCompanyIntranet ma projekt VS dla każdej aplikacji i jeden projekt dla widoków (strona w stylu MVC). Projekt OurCompanyInternet.UI jest projektem strony internetowej, który odwołuje się do każdego projektu aplikacji w rozwiązaniu (OurCompanyIntranet.Appliation1 ... OurCompanyIntranet.ApplicationN). Chcemy uporządkować nasze rozwiązania, aby pasowały do ​​TFS. – awilinsk

+0

Edytowałem moje oryginalne pytanie, aby dodać przykład, w jaki sposób tworzymy aplikacje. Widzę, skąd przychodzisz, dodając projekty z innych rozwiązań do rozwiązania dla projektu zespołowego. Jak to zrobić w kontroli kodu źródłowego, abyśmy nie powielać. W jaki sposób będziemy tworzyć kompilacje dla projektu Team1 Team lub czy będziemy tworzyć kompilacje w projektach zespołów OurCompanyInternet i OurCompanyIntranet? – awilinsk

0

Jeśli jest to aplikacja, która przy uruchomieniu w produkcji, wprowadziłbym minimalne zmiany w strukturze folderu/rozwiązania. W TFS w definicji kompilacji można wybrać wiele projektów lub można również umieścić wiele rozwiązań w skrypcie kompilacji jak w poniższym przykładzie

How to build 2 solutions from a single TFS team build definition

+0

Budowanie nie jest jedyną rzeczą, o którą się martwię. Chcę też mieć tylko jeden projekt zespołowy, który obejmuje wiele rozwiązań, dzięki czemu mogę przechowywać wszystko dla tego projektu w jednym miejscu. – awilinsk

0

Jeśli chcesz mieć scentralizowane raportowanie dla całego kodu, powinieneś zbadać możliwość użycia jednego TeamProject do hostowania wszystkiego.
Aby następnie rozróżnić różne komponenty/części, można zastosować oddzielne obszary w ramach tego projektu zespołowego.
Sprawdź bardzo interesujący artykuł this, szczególnie sekcję "Wady".

+0

Świetny artykuł. Dziękuję Ci. – awilinsk

Powiązane problemy