2 votes

Dois-je séparer la logique Dispose dans un fichier de classe partielle ?

En remaniant certaines classes C#, je suis tombé sur des classes qui implémentent IDisposable.

Sans réfléchir, j'ai créé des fichiers de classe partiels pour chaque classe qui implémente l'interface IDisposable.

Par exemple) Pour Stamper.cs -> Stamper.cs + Stamper.Dispose.cs où Stamper.cs contient la logique réelle de l'estampillage et Stamper.Dispose.cs qui contient une logique d'élimination

// Stamper.cs
public partial class Stamper
{
// actual logic
}

// Stamper.Dispose.cs
public partial class Stamper: IDisposable
{
// Implement IDisposable
}

Quand j'ai regardé le code, Stamper.cs semble maintenant beaucoup plus propre et lisible (maintenant environ 52 lignes au lieu de 100 lignes où environ 50 lignes étaient simplement un code de nettoyage et de disposition)

Est-ce que je vais trop loin avec ça ?

*EDIT : Merci à tous pour vos avis - J'ai décidé de réunir deux fichiers en un seul. Le problème auquel j'étais confronté était que j'oubliais de mettre à jour l'implémentation d'IDisposable après avoir mis à jour la logique actuelle.

De plus, il n'y avait pas beaucoup de problèmes pour naviguer entre les méthodes dans le code source. La première raison semble plus qu'une raison suffisante pour s'en tenir à la solution d'un seul fichier dans mon cas spécifique.

8voto

StingyJack Points 10956

Oui, trop loin. Qu'est-ce qui ne va pas avec le fait de coller un #Region autour du code et de le replier pour qu'on ne le voie pas ?

7voto

Maurice Flanagan Points 2950

Cela semble aussi arbitraire que de créer une classe partielle pour la logique du constructeur. Maintenant je dois regarder deux fichiers pour trouver cette classe. Les classes partielles ne valent vraiment la peine que pour des trucs de concepteur...

6voto

Rowland Shaw Points 22860

Je préférerais voir la logique de disposition dans le même fichier que les ressources qui justifient l'implémentation d'IDisposable. Bien qu'il y ait une part de subjectivité, je dirais que c'est trop

2voto

JohannesH Points 3817

Je pense que votre solution n'est pas solide. Les classes partielles ne devraient généralement être utilisées que pour séparer le code du développeur du code du générateur. Les régions font généralement un meilleur travail pour ajouter de la structure à votre code.

1voto

Coincoin Points 12823

Si votre procédure de nettoyage est lourde, c'est acceptable, mais pas idéal.

C'est peut-être une bonne habitude pour les éléments de base tels que les événements exposés, les méthodes de sérialisation lourdes et, dans votre cas, la gestion de la mémoire.

I préférez des classes partielles que des contours (#region). Si vous devez utiliser des classes partielles ou des contours de code pour rendre votre code lisible, c'est généralement un signe que le code doit être modifié. Déchirez la classe et n'utilisez la classe partielle (ou la région) qu'en dernier recours, si le code est absolument nécessaire au maintien de cette classe.

Dans votre cas, vous pourriez utiliser une classe qui enveloppe finement la ressource non gérée et exposer un seul Dispose. Ensuite, dans votre autre classe, utilisez l'objet géré et déposez-le sans aucune logique.

Si votre classe n'est qu'une enveloppe mince, alors je dirais que votre méthode est exagérée puisque le but de la classe est de disposer d'une ressource non gérée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X