8
votes

Comment refacturer de grands projets dans Visual Studio

Je rencontre toujours un problème où mes projets dans Visual Studio (2008) deviennent énormes monstruosités et tout est généralement jeté dans un projet d'application Web. Je sais de vérifier certaines choses open source qu'ils ont tendance à avoir plusieurs projets dans une solution, chacun avec leurs propres responsabilités.

Quelqu'un a-t-il des conseils pour se refroidir cela? Que devrait être dans un projet séparé contre une partie du projet Web? Pouvez-vous me signaler à des documents de référence sur le sujet ou est-ce que vous vous habituez à quelque chose avec le temps?


1 commentaires

Eh bien d'abord, vous aurez besoin de Resharper ...


3 Réponses :


6
votes

Organisez votre projet proprement dans les espaces de noms. Les espaces de noms ne doivent pas être trop gros, pas trop petits. Faire chaque espace de noms a une "interface" publique (c'est-à-dire un ensemble de classes publiques) et n'accumule pas les détails de la mise en œuvre internes de l'espace de noms d'autres espaces de noms. Différents espaces de noms abordent généralement différentes parties d'une application, par exemple. Vous aurez des espaces de noms liés à l'interface utilisateur, la logique commerciale, la fonctionnalité d'assistance, etc. Le Directives de conception-cadre ont de bonnes suggestions comment concevoir des espaces de noms.

Lorsque vous estimez que votre projet pousse trop volumineux, identifiez simplement des ensembles d'espaces de noms qui sont clairement liés aux autres et les déplacent à des projets séparés. Étant donné que d'autres espaces de noms utilisent déjà l'interface publique des espaces de noms déplacés, refactoring les espaces de noms dans de nouveaux projets est simplement une opération de déplacement de fichiers.


2 commentaires

Ça a du sens. Essayez-vous de garder des fichiers de classe dans un projet séparé des fichiers de projet Web spécifiques? Ou les laissez-vous se mêler (pendant que des noms de noms). Y a-t-il des meilleures pratiques pour les messages de noms? Désolé, je sais que c'est vraiment basique, mais je le fais depuis quelques années et j'ai finalement atteint le point de rupture de la frustration.


Le livre FDG est le guide. Une fois que vous avez fait des espaces de noms significatifs, essayez de les développer et de scinder le projet énorme en plusieurs plus petits. Je suis d'accord, Resharper est sympa, mais Ndepend est encore plus utile. codebetter.com/blogs/patricksmacchia/archive/2008/09/23/...



2
votes

Commencez par le bas vers le haut (vos classes les plus simples qui ne dépendent de rien d'autre en dehors du cadre) et de voir si vous pouvez isoler les dépendances dans des unités fonctionnelles. Par exemple, si vous avez un tas de classes de données ou de logiques commerciales qui se réfèrent mutuellement, mais ne font jamais référence à l'une de vos classes d'interface utilisateur, vous avez un candidat à la scission d'un autre projet. Si vous ne trouvez pas de points de séparation clairs, vous avez un problème de conception et devriez probablement faire du refactoring.

Je suis également d'accord que l'utilisation d'espaces de noms est un bon endroit pour commencer. Même dans un projet, vous pouvez souvent isoler ou minimiser les dépendances d'une manière qui englobe naturellement les classes. Les mettre dans le même dossier renforcent ce groupe comme unité fonctionnelle et peut vraiment aider le pauvre gars qui doit maintenir votre code à l'avenir. Fais-moi confiance, j'essaie de penser à ce pauvre gars parce que, à plus d'une occasion, ce pauvre gars a été moi. TWAS Un petit confort que la personne qui a écrit le code avait le même nom que moi à l'époque qu'il l'a écrit.


0 commentaires

1
votes

Consultez le Directives données par le projet Architecture Sharp . Son ASP.NET MVC, mais les mêmes principes s'appliquent à ASP.NET et à d'autres projets. Les gars qui mettent ce genre de choses ensemble sont intelligents I utilisent généralement leurs conseils comme par défaut et seulement errant quand j'ai une bonne raison.

Le niveau de niveau de base qu'ils proposent est

  • A Projet CORE pour vos objets de domaine et vos interfaces pour accéder aux services externes (y compris la persistance).
  • A DATA DATA dépend du noyau et implémente toutes les interfaces pour accéder à la persistance
  • Un projet Projet pour soutenir les préoccupations de niveau d'application telles que la journalisation ou la validation de la connexion. Ce seul référence ne fait que références.
  • A Web Le projet ne contient que des vues.
  • a contrôleurs contient votre code de bootstrapping et le code de coordination de votre couche Web, domaine.

    Dans le cas d'une application ASP.NET, j'aime utiliser le motif MVP qui signifie essentiellement le

    • Le projet Web contient vos formes Web et CodeBehinds qui ne doivent contenir que la quantité minimale de code requise pour rediriger vers le présentateur. Vous devrez probablement également mettre votre code d'amorçage là-bas. Ceci est dû à une limitation ASP.NET et vous ne devez y réfléchir à aucune de ces choses de votre codeCeHinds.
    • Les contrôleurs sont remplacés par un projet de présentateurs. La grande différence ici est que le présentateur doit être instancié par le WebForm plutôt que sur l'inverse.

      Vous pouvez également essayer de consulter le ASP.NET MVP Project .


0 commentaires