2009-07-28 9 views
0

Ma situation est très simple. J'ai une classe A, appelée via le service WCF, qui la délègue fonctionne à plusieurs classes 'assistantes'. Ces classes 'assistantes' sont évidemment internes. Le problème est que je ne veux pas que quelqu'un appelle ces classes directement. Je voudrais qu'ils appellent toujours la classe A. Cela signifie que j'ai besoin d'une «visibilité de l'espace de nom». Je pense que je peux le simuler en rendant les classes 'helper' privées (donc je les inclurai dans A, qui sera divisé, grâce au mot-clé partial, en plusieurs fichiers (un par classe d'aide)). Quelle est votre opinion sur cette solution? Est-ce que c'est très sale?Visibilité de l'espace de noms C#

Merci d'avance.

Répondre

2

Si les classes auxiliaires sont internes, le code en dehors de l'assembly ne pourra pas les appeler de toute façon. Ne faites-vous vraiment pas confiance au reste du code dans votre assemblage?

Il n'y a rien de tel que la visibilité de l'espace de noms dans .NET, même si je suis parfois d'accord que ce serait utile.

I serait dire que l'utilisation partial pour faire efficacement une classe géante serait une solution assez laide. Je laisserais simplement cela à la visibilité interne et j'utiliserais les processus normaux de révision de code pour éviter d'appeler les helpers d'ailleurs. Heck, vous pouvez même trouver que les aides sont vraiment utile ailleurs (ou au moins quelques morceaux d'entre eux).

0

Oui, ce serait une solution laide. La manière pratique serait de n'inclure que la classe A et les autres classes auxiliaires dans un assembly séparé avec A étant public et les classes auxiliaires étant internes. Avez-vous vraiment une inquiétude légitime que les autres classes d'un même assembly ne puissent pas utiliser les classes auxiliaires? Généralement, un assemblage est une unité structurelle créée par une équipe.

Une autre option (si vous voulez remettre en cause les classes auxiliaires) consiste à placer toutes les classes d'assistance interne dans un assembly, puis à utiliser InternalsVisibleToAttribute pour ouvrir ces classes à utiliser par exemple. AssemblyA qui a la classe A.

0

Pour les solutions plus petites, vous devriez être OK avec le fractionnement de votre assemblage lorsque vous avez besoin de l'encapsulation. Mais pour les très grandes solutions (> 100 projets), vous pourriez être obligé de trouver des alternatives, car le studio visuel se comporte mal lorsque vous avez passé 150 projets - les temps de construction montent en flèche et vous commencez à manquer de mémoire.

Malheureusement, cela ne s'est pas beaucoup amélioré dans VS2010.

Questions connexes