2009-12-07 4 views
2

J'ai réfléchi à des façons de refactoriser une bibliothèque de classes/utilitaires assez étendue, et une chose que je veux faire est de séparer tous les utilitaires auxiliaires de plus haut niveau qui introduisent de nouvelles dépendances. J'ai lu quelques questions précédentes ici, et une que j'ai particulièrement remarqué était un commentaire sur la façon dont Microsoft utilise librement les espaces de noms sur les DLL. L'exemple donné était System.Web - c'est dans le framework de base, mais il y a aussi un System.Web.dll qui ajoute plus de fonctionnalités à l'espace de noms si vous le voulez.Pourquoi tant de DLL System.Web. * Individuelles?

J'ai également remarqué plusieurs autres DLL System.Web.* disponibles, et je me demandais s'il y avait une raison pour laquelle ils ne seraient pas combinés dans une seule DLL. Serait-ce qu'ils ont leurs propres dépendances individuelles et Microsoft (comme moi) voulait séparer les assemblées dans ce sens? Ou est-ce pour une maintenance plus facile? Quelque chose d'autre entièrement?

Répondre

3

La raison pour laquelle ils ne sont pas 1 .dll est parce que différentes versions de la structure.

System.Web sous la version 2.0

System.Web.Abstractions, System.Web.DymanicData, System.Web.DymanicData.Design, etc. . . . System.Web.Extensions

sont tous écrits dans le cadre 3.5.

Si vous avez modifié System.Web à 1 .dll et que tous les utilisateurs doivent modifier le framework .NET 3.5, IIS utilise toujours 2.0.

+0

Bon point, ça ne m'est pas venu à l'esprit. – toasteroven

2

Eh bien, il pourrait y avoir d'autres réponses, mais celle qui est la plus importante pour moi est l'angle de sécurité. Vous accordez des autorisations sur les assemblys, pas sur les espaces de noms. Cela vous permet de grouper les classes logiquement par intention via des espaces de noms, mais d'avoir des classes qui accèdent aux ressources regroupées dans un assembly. Oh, et vous pouvez également avoir des assemblys neutres, vous permettant de regrouper les routines dépendantes de la langue dans un assemblage différent.

1

La plupart des assemblys System.web sont utilisés uniquement lorsqu'un serveur ASP.net traite et met en service une page ou un service Web. Ils ne sont généralement pas requis pour les applications .Net côté client et ne sont pas inclus dans le profil client .Net plus petit; une version allégée du framework .Net. (ref: http://msdn.microsoft.com/en-us/library/cc656912.aspx)

Questions connexes