Question

J'utilise le modificateur de classe partiel depuis un certain temps afin de placer les classes auxiliaires dans leur propre fichier.

Aujourd'hui, nous avons eu un nouveau type et il a dit que la dernière équipe avec laquelle il avait travaillé ne permettait pas les classes partielles pour cela, car la modification d'une classe auxiliaire figurant dans un fichier séparé provoquerait le détournement du fichier de classe principal principal. avec les changements. De plus, ils n’ont été autorisés à placer en dernier recours qu’une classe d’aide dans la classe principale afin que tout reste découplé.

Qu'en penses-tu? Y at-il un problème en utilisant des classes partielles comme celle-ci ou est-ce que cela se résume à la préférence?

Par exemple, j'ai généralement quelque chose comme ceci:

  • MainClass.cs
  • MainClass.Helper1.cs
  • MainClass.Helper2.cs

...

// Inside of MainClass.cs I have code like this:

public abstract partial class MainClass
{
    // ...
}

// Then in the MainClass.Helper1.cs I have:

partial class MainClass
{
   private class Helper1
   {
       // ...
   }
}
Était-ce utile?

La solution

Les classes partielles sont principalement pour l'utilisation du générateur de code, telles que les concepteurs - mais j'utilise l'approche que vous avez citée - en particulier lorsqu'un objet implémente plusieurs interfaces (non triviales), je le trouve utile pour le casser 1 fichier par implémentation d'interface. J'ai aussi couramment un fichier pour les méthodes statiques, qui sont généralement assez différentes des méthodes d'instance pour justifier la séparation.

Autres conseils

Personnellement, je ne vois rien de mal à utiliser des classes partielles comme celle-ci, mais ce n’est que ma propre opinion. La seule chose qui pourrait ressembler à une & "Mauvaise pratique &"; est de nommer vos classes " Helper1 " et " Helper2 " (mais cela pourrait être un exemple uniquement à des fins de clarification).

Si vous utilisez des classes partielles comme celle-ci, consultez le complément (gratuit) vsCommands (pour Visual Studio 2008) qui facilite vraiment le groupe de fichiers dans l'explorateur de solutions (tout comme les fichiers de concepteur) sans modifier le fichier de projet.

Réponse courte: Si toutes les classes constituent votre code, vous n'avez pas vraiment besoin de classes auxiliaires, ce qui invalide votre besoin de partiels.

Réponse longue: Je ne suis pas sûr qu'il y ait quelque chose qui dit que votre pratique est explicitement fausse. D'après mon expérience, si vous avez plusieurs fichiers différents qui composent la classe entière, vous avez besoin d'une bonne raison pour le faire, car:

  1. Les classes partielles réduisent quelque peu la lisibilité
  2. Si vos classes contiennent plusieurs classes d'assistance, cela peut être le symptôme d'une conception médiocre. Je ne pense pas avoir jamais été confronté à une situation dans laquelle j'ai été obligé d'écrire des classes d'assistance pour les classes que j'ai créées.

Cependant, je pense que la génération de code est la meilleure raison d'utiliser des classes partielles. Vous souhaitez pouvoir générer à nouveau un fichier sans perdre le travail personnalisé.

J'ai effectivement fait la même chose. Comme on l’a dit, il existe une légère difficulté à déchiffrer les classes partielles.

Le découplage est la raison principale pour laquelle je aime cette solution. Une classe interne privée est beaucoup moins couplée à tout le reste, car rien d'autre ne peut la voir ou l'utiliser (bien qu'ils puissent parler du potentiel d'accès aux données privées de la classe parente, ce qui serait généralement une mauvaise idée).

D'après mon expérience, il n'y a pas de différence entre la classe noramal et la classe partielle.Si votre conception nécessite une structure importante de classe ou la mise en oeuvre d'interfaces supplémentaires, optez pour une classe partielle. Tous les deux sont identiques.

Je ne suis pas un très grand fan des classes partielles et ne les utilise pas moi-même.

La seule fois où je les trouve utiles et acceptables à utiliser, c’est lorsque vous souhaitez ajouter quelque chose au code du concepteur LINQ to SQL. Par souci, cela peut rendre très difficile à lire et à gérer.

Peut-être que si vos classes sont divisées en plusieurs fichiers, vos classes en font peut-être beaucoup… juste une pensée:)

Je pense que si les classes imbriquées sont suffisamment grandes pour que vous sentiez le besoin de les séparer dans leurs propres fichiers, elles ne devraient probablement pas être des classes imbriquées. Faites-en des membres internes du même espace de noms que MainClass.

Les classes partielles n'existent réellement que pour prendre en charge les générateurs de code et leur utilisation pour décomposer le code écrit par le programmeur en fragments gérables est un indicateur de mauvaise conception.

Voir cet article pour obtenir un exemple hilarant de ce qu'il ne faut pas faire. faire avec des classes partielles.

Je n'utilise généralement jamais de classes partielles pour des raisons similaires à celles mentionnées ci-dessus.

Mais! Bien que cela ne soit pas fréquent, j'ai parfois constaté que le test d'unités en profondeur d'une classe (généralement des classes externes) conduit à des classes de tests d'unités géantes. La division de la classe de tests unitaires en classes partielles facilite la compréhension et la compréhension.

Semblable à l'idée de regroupement lors de l'héritage de plusieurs interfaces, le test unitaire peut être groupé pour des fonctions.

Je pense qu'il est bon de rappeler que le comportement par défaut de votre outil consiste à créer une forme de bas niveau de Coupling Not Cohesion. et le regarder avec scepticisme, et le remplacer à moins que cela ne soit logique pour certaines des raisons spécifiques énumérées ci-dessus. Mais ce n'est pas un bon comportement par défaut.

La plupart du temps, je n'utilise que des classes partielles avec la génération de code. Je peux donc étendre le comportement de mes classes sur des classes séparées qui nécessitent une personnalisation et ne sont pas incluses dans la génération de code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top