Frage

Ich habe ein VB.net Projekt geerbt, die 2 DLLS erzeugt: ein für den Web-App, und eine andere für die „Business-Schicht“. Dies ist für eine Unter App einer größeren Web-Site. (Mit VS2005).

Das Problem ist, dass etwas nicht stimmt mit der DLL-Namespace-Struktur nicht riechen, und ich würde gerne wissen, ob es irgendwelche Auswirkungen auf der Leistung sind.

Der wichtigste Web-App ist "Foo" und erzeugt Foo.dll. Foo.dll enthält Namespace App.Foo, die die Klassen für alle Seiten enthält, Bedienelemente, etc.

Es gibt auch ein Projekt „FooLib“, die FooLib.dll erzeugt. FooLib.dll enthält auch einen App.Foo Namespace, der eine Reihe von Klassendefinitionen enthält. Es gibt ein paar andere Namensräume wie App.Foo.Data, App.Foo.Logic, etc.

Gibt es etwas falsch mit diesem? Wie wirkt sich die Laufzeit eine Klasse über mehrere DLLs finden?

War es hilfreich?

Lösung

Wenn Ihr Programm der vollständigen Typnamen kompiliert wird mit „Beweis“ enthält zusammen. Dieser Nachweis enthält den Namen der Baugruppe und Versionsinformationen. Sonst wäre es nicht wissen, ob Sie die 1.0 oder 1.1 oder 2.0 Version der Klasse wollten. Das gleiche System ermöglicht es verschiedene Klassen im gleichen Namensraum in verschiedenen Baugruppen zu finden.

Was die Leistung geht, gibt es keine großen Effekt. Auf der positiven Seite bedeutet dies, dass zu unterschiedlichen Zeiten einige Ihrer Sachen geladen werden können, und das ist in der Regel die gewünschte Wirkung.

Namespaces sind über Verpackungs Funktionalität in einer Weise, dass es leicht zu finden macht. Baugruppen sind über Funktionalität in einer Weise, die Verpackung, die laden effizient ist. Manchmal sind sie nicht das gleiche.

Andere Tipps

Es ist nichts falsch mit diesem, können die einzig möglichen Probleme sein, dass 1) Entwickler sehen „App.Foo.Something“ kann nicht wissen, welche Baugruppe in 2 zu sehen), wenn die gleichen Namen in beiden verwendet wird, Apps Kompilieren gegen ( in c # zumindest) werden Fehler über mehrdeutige Typnamen erhalten.

Wie für die Laufzeit werden Arten von Montage und Namen angegeben - der Namensraum ist nur ein Teil des Typnamen. So wird die Laufzeit kein Problem haben, die Art zu finden -., Wenn Sie die Informationen kompilieren, was Montage es zu finden in in kompiliert wird,

Nein, es ist nichts falsch mit diesem.

Man betrachte ich eine Reihe von benutzerdefinierten Klassenbibliotheken verwenden, und fast jeder von ihnen hat die folgende Namespace-Struktur:

  

.Web.UI.Controls.

Welche ist ähnlich (und von MS als Best Practice empfohlen) zu System.Web.UI.Controls ..

Die Sache ist die, dass der Compiler wird wissen, dass es der richtige Namensraum in so viele DLLs, die Sie zuordnen (es für sie über beide DLLs suchen). Der einzige Grund, warum ich sie genau das gleiche auf diese Weise zögern würde zu machen, ist wegen der möglichen DEVELOPER Verwirrung. Der andere Grund ist bei jeder Namespace eine Klasse genau das gleiche benannt hat -. Und dies wird ein Compiler-Fehler werfen, bis er mit einem vollständig benannte Namespace-Deklaration aufgelöst wird

Welcher Teil des Grundes ist, warum können Sie Alias-Namensräume. Aliasing werden beide Konzepte heilen. Die Struktur dafür sieht wie folgt aus:

using Foo.App.Foo;
using FooLib = FooLib.App.Foo;

Wenn Sie also dann eine Bar Klasse haben sowohl in Foo.App.Foo und FooLib.App.Foo, um die Anwendung zu Version zugreifen möchten Sie verwenden:

bar x = new bar();

Für die Bibliothek Version würden Sie verwenden:

FooLib.bar x = new FooLib.bar();

Nein, es ist nichts falsch mit überlagerten Namensräumen. Werfen Sie einen Blick auf die .net Framework selbst, wo viele Namespaces überschichtet werden.

Namensräume sind auf der IL-Ebene nicht vorhanden. Die Laufzeit eine Klasse von einem Pseudo vollständig qualifizierte Namen finden, das heißt, der Name des Typs von seinem Namespace vorangestellt.

Ich glaube nicht, dass es ein technisches Problem, das zu tun, in der Tat manchmal der .NET Framework selbst gleicher Namensraum accross mehrere physikalischen Baugruppen verwendet.

Namespace sind nicht erste Klasse Bürger in der .NET-Welt, und ich bedaure das.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top