Question

Je suis en train de concevoir un nouveau Système et j'ai beaucoup d'Interfaces qui va croître au fil du temps avec le système.Quelle est la meilleure pratique pour le nom des interfaces

ISomethingV01
ISomethingV02
etc

et je le fais

public interface ISomething{
      void method();
}

puis-je ajouter de la méthode 2 alors maintenant, ce que je fais?

public interface ISomethingV2:ISomething{
      void method2();
}

ou même d'autres de la sorte?

Était-ce utile?

La solution

Idéalement, vous ne devriez pas être en train de changer vos interfaces très souvent (si).Si vous avez besoin de changer une interface, vous devez reconsidérer son but et de voir si le nom d'origine s'applique toujours à elle.

Si vous vous sentez toujours que les interfaces changent, et les interfaces modifications sont de petite taille (de l'ajout d'éléments) et vous avez le contrôle de l'ensemble de la base de code, alors vous devriez juste modifier l'interface et de corriger toutes les erreurs de compilation.

Si votre modification est un changement dans la façon dont l'interface est utilisée, alors vous avez besoin pour créer une interface séparée (probablement avec un nom différent) pour soutenir que la variante du schéma d'utilisation.

Même si vous finissez par la création de ISomething, ISomething2 et ISomething3, les consommateurs de vos interfaces ont un moment difficile de déterminer quelles sont les différences entre les interfaces.Quand faut-il utiliser ISomething2 et quand doivent-elles utiliser ISomething3?Ensuite, vous devez aller sur le processus de obsoleting ISomething et ISomething2.

Autres conseils

Je pense que vous êtes overrusing interfaces.

Meyer et Martin nous dit:"Ouvert pour l'extension, mais fermé pour la modification!"

et puis Cwalina (et al) a réaffirmé:

Du Cadre Des Lignes Directrices De Conception...

En général, les cours sont privilégiées construire pour exposer des abstractions.Le principal inconvénient des interfaces qu'ils sont beaucoup moins flexibles que les les classes quand il s'agit de permettre l'évolution de l'Api.Une fois que vous expédiez un l'interface, l'ensemble de ses membres est fixe à jamais.Tous les ajouts de la interface de casser les types existants la mise en œuvre de l'interface.

Une classe offre beaucoup plus de flexibilité.Vous pouvez ajouter des membres pour les classes déjà expédiés.Tant que le la méthode n'est pas abstrait (c'est à dire, aussi longtemps comme vous vous en fournir une valeur par défaut la mise en œuvre de la méthode), tout existant classes dérivées de continuer à fonction inchangée.

alt text

Je suis d'accord avec Garo Yeriazarian, changement de l'interface est une décision grave.Aussi, si vous souhaitez promouvoir l'utilisation de la nouvelle version de l'interface, vous devez marquer ancienne version obsolète.Dans .NET, vous pouvez ajouter ObsoleteAttribute.

Le but de l'interface est de définir un motif abstrait qu'au type doit mettre en œuvre.

Il serait préférable de mettre en œuvre comme:

public interface ISomething

public class Something1 : ISomething
public class Something2 : ISomething

Vous n'avez pas gagner quoi que ce soit dans la forme de code de la réutilisation ou la conception évolutive par la création de plusieurs versions d'une même interface.

Je ne sais pas pourquoi les gens downvote votre post.Je pense que les bonnes règles de nommage sont très important.

Si vous avez besoin de maintenir la compatibilité avec les prev.version de la même interface d'envisager l'utilisation de l'héritage.Si vous avez besoin d'introduire une nouvelle version de l'interface de considérer règle suivante:

Essayez d'ajouter significative suffixe pour vous de l'interface.Si il n'est pas possible de créer concis nom, pensez à ajouter numéro de version.

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