2009-05-20 5 views
3

Ich mache eine sehr große Web-App (derzeit bei 70 Projekten und 150k loc, aber mit viel mehr zu tun).Best Practices zum Organisieren der Struktur/Ausführen von "Builds" auf einer großen Lösung

Ich benutze FinalBuilder, um Build-Skripte auszuführen. Was sind die besten Praktiken für die Strukturierung eines so großen Projekts? Was ist mit Build-Abhängigkeiten? Welchen Einfluss hat die Struktur meiner Projekte auf die Leistung des Codes (falls vorhanden)?

Ich habe einige vorherige Threads darüber gesehen, aber ich kann diese nicht finden. Ich habe Themen über Lösungen gesehen, die mehr als 600 Projekte in der Lösung überschreiten. Um klare Antworten zu erhalten, stellen wir uns vor, dass dieses System auf diese Größe anwachsen wird (Ich würde gerne wissen, wie man ein Projekt organisiert, das größer ist als das, was meins ist). weil es bedeuten würde, dass ich eine kleinere Lösung organisieren kann).

Wenn es darauf ankommt, ist das System meist in .NET 3.5 (C#, LINQ, SQL Server usw.), wird aber auch Python/Erlang verwenden.

Antwort

3

ich nur 40 Projekte (aber mehrere Millionen loc), und die wichtigsten Best Practices wir haben, ist:

  • identifizieren Abhängigkeiten zwischen Projekten
  • eine globale Liste von Etiketten von allen Projekten verwendet errichten möchte, um an der nächsten Version teilzunehmen
  • stellen Sie sicher, dass jedes Projekt, das bereit ist, ein eigenes Label in diese globale Liste zu veröffentlichen, dieses Label aus einer Konfiguration (Liste von Labels) erstellt hat, die von der globalen
  • registriert baut "(das möglicherweise in die Produktion zu implementieren) in ein Repository.

Auf diese Weise:

  • Entwickler Werke und kompilieren ihren Code direkt gegen die Lieferungen der anderen Projekte auf sie hängt (im Gegensatz die Quellen der anderen Projekte zum Herunterladen und alle in lokalen Rebuild).
    Sie haben nur die richtigen Lieferungen, weil sie ihre Abhängigkeiten kennen (sowohl sofortige als auch transitive)
  • Tester können schnell eine Reihe von Lieferungen bereitstellen (aus der globalen Liste von Etiketten), um verschiedene Tests (nicht-Regression, Stress- Tests, ...)
  • Release-Management dieser Lieferungen bereitstellen kann (nach einer endgültigen globalen Build) auf der Vorproduktion und Produktionsplattformen mit

Die Idee ist:

  • die Lieferung auf allen Schritten nicht wieder aufbauen
  • bauen Sie es nur in der Entwicklungsphase (durch ein gemeinsames Unified Building-Skript)
  • bauen Sie es wieder vor der Freigabe (für die Vorproduktion und Produktionsplattform)
  • Kompilierung und/oder Test nur gegen diese Lieferungen (und nicht gegen Quellen heruntergeladen und für den Anlass neu zusammengestellt: wenn Sie mehr als ein paar Projekte haben, ist es einfach nicht praktikabel ist)

Haupt Best-Practice :
Wenn Ihr eigenes Projekt mit den Lieferungen der anderen Projekte arbeitet (und nicht mit Ihrem lokalen Re-Build dieser anderen Projekte), hat es gute Chancen, in den nächsten Schritten des Software-Produktionslebenszyklus zu arbeiten (Test, pre-prod, production)

2

Haben Sie überlegt, NMaven zu verwenden und jedes der 70 Projekte zu einem Modul zu machen? Auf diese Weise können Sie das Erstellen, Packen, Versionieren und Freigeben einzelner Module und des übergeordneten Projekts als Ganzes steuern. Es würde Ihnen auch helfen, die Abhängigkeiten zwischen den verschiedenen Modulen, externen Bibliotheken und sogar Versionen und verschiedenen Lebenszyklusbereichen zu lösen (zum Beispiel benötigen Sie NUnit nur während des Testzyklus, müssen es aber nicht im Build packen).

Es könnte helfen, genauer zu beschreiben, wie diese Projekte aussehen und wie sie voneinander abhängen.

+0

Ich habe nie wirklich von NMaven gehört. Ich werde es mir ansehen.Bis jetzt ist das Layout Foundation/Midrange/Business - Foundation hat Logging, Fehlerbehandlung, Performance-Monitoring, Midrange hat Module wie CMS und Blog-Engine, die Business-centric Features unterstützen (Hauptfaktor in kommerziellen Potenzial) - zB Business-Module Wie die E-Commerce-App wird Produkt-Seiten haben, aber von der CMS gemacht. – dotnetdev

1

Ein bisschen offen als Frage. Beginnen wir mit einer Grundstruktur Ich schlage vor, als Ausgangspunkt für meine Kunden, in einem Zweig beginnen Ich habe

  1. Build-Skripte
  2. Bauabhängigkeiten - Dinge auf einer Maschine zu bauen
  3. Bibliotheken zu installieren - LIB, DLL ... direkt aus Projekten verwiesen
  4. Dokumentationsquellen - Hilfe Quellen
  5. Quellen
  6. Deploy Scripts

dann Quellen in

  1. Admin organisiert - Admin-Konsole und Skripte
  2. Datenbank - Schemata, Skripte, Anfangsdaten
  3. Gemeinsame
  4. Web
  5. NTServices
  6. Services - REST/SOAP-Dienste
  7. BizTalk - Sie nennen Dinge, die für ein Produkt spezifisch sind
Verwandte Themen