2009-03-31 5 views
1

Ich habe viele Projekte, die nach dem Namensraum-Typen sind unterWann fügen Sie ein neues Projekt für einen geschachtelten Namespace hinzu?

alt text

Beim Hinzufügen eines neuen Teilnamespace genannt werden, wie Sie sich entscheiden, ob Sie einen neuen Ordner in einem
Projekt
• erstellen - - oder -
• ein neues Projekt in einer Lösung erstellen?

Was sind einige der Vorteile, die ich für jedes Szenario berücksichtigen sollte?

Antwort

5

Die Frage, die Sie sich stellen müssen, ist: Passen die zwei Abschnitte des Codes logisch als eine Bereitstellungseinheit zusammen? Wenn ja, behalten Sie sie im selben Projekt. Wenn nicht, trennen Sie sie.

Um ehrlich zu sein, würde ich selten ein neues Projekt für den "verschachtelten" Namespace erstellen - es scheint einfach nicht so in der Regel zu funktionieren. Denken Sie insbesondere darüber nach, ob Sie auf den "verschachtelten" Namespace von der "äußeren" und umgekehrt zugreifen möchten - wenn sie sich vernünftig auf einander beziehen würden, dann sollten sie sich im selben Projekt befinden.

+0

Geschachtelte Namespaces greifen meist auf den übergeordneten Namespace zu, aber nicht umgekehrt. Der übergeordnete Namespace ist nicht von dem verschachtelten Namespace abhängig. So zB) "Project.Common.Util" verweist möglicherweise auf "Project.Common", aber "Project.Common" ignoriert "Project.Common.Util" – Sung

+0

@Sung: Ich bin nicht einverstanden, zum Beispiel System.Data.DataTable.Load (IDataReader) ist nur ein Beispiel. Ich habe auch gesehen, dass viele Konfigurationsklassen in einen Kind-Namespace verschoben werden. – JoshBerke

+0

@Josh: Würde das normalerweise nicht eine zirkuläre Referenz erzeugen? – Sung

1

Just my 2 cents auf diese Frage geben, Jon Antwort mit etwas zu erweitern „schon dort - getan, dass“ Erfahrung:

Ich habe den Einsatz in mehreren Lösungen, mindestens zwei von Namespace namens Projekte (na ja, irgendwie). Zum Beispiel, wenn ich an der MyApp-Lösung arbeite, hätte ich MyApp.Web und MyApp.Web.Controls.

Oder: MyApp.Service, MyApp.Core, MyApp.Core.Entities und so weiter. Ziemlich gut bekannt Namenskonvention, wo der Stammnamespace wie MyCompany.MyApp.Service etc... geht

Vorteil: - fand es sehr nützlich, wenn in einem Team zu arbeiten, um die Abhängigkeiten zwischen App-Modulen zu markieren. Wenn Ihr Modul Web.Controls (es ist nur ein Beispiel, wählen Sie es nicht :) ist über die Web-Benutzeroberfläche freigegeben, möchten Sie in der Regel nicht app-spezifischen Code in Ihren benutzerdefinierten Steuerelementen. Wenn das Modul "Kind/verschachtelt" getrennt bleibt (auf das vom Hauptprojekt verwiesen wird), wird dies erzwungen. - wenn Sie zumindest daran denken, können Sie möglicherweise eine bessere Projektstruktur erstellen. Welcher Namespace gehört zu einem separaten Projekt und welcher nicht? Die Beantwortung der Frage alleine ist hilfreich genug.

Nachteil: - es ist sehr einfach „trigger happy“ zu bekommen und hundert Projekte, anstatt, entsprechende Ordner/Namensräume erstellen.

Das gesagt, neigen in der Regel dazu, Ordner anstelle von separaten Projekten zu erstellen, außer für den Fall, wenn es wirklich ein "Sub-Modul" ist.

+0

+1 Great stuff, Dan! Vielen Dank für Ihre Erfahrungen mit diesem Problem. – Sung

Verwandte Themen