1 votes

Attributs personnalisés sur les interfaces ou les classes qui les mettent en œuvre ?

Lorsque l'on utilise des attributs personnalisés pour stocker des métadonnées, est-il préférable de décorer l'interface ou la classe qui implémente l'interface, en supposant que toute classe qui implémente l'interface contiendrait les mêmes données dans l'attribut ?

Mise à jour : Je suis en train d'écrire un mécanisme de stockage de données personnalisé pour un projet, et les objets représentent les différentes tables stockées. L'attribut custom est utilisé pour désigner la table de l'ensemble de données utilisée pour stocker les objets de cette classe, ainsi que pour identifier les tables impliquées dans une relation n:m.

Si je place les attributs dans l'interface, est-ce une approche plus claire, ou cela encombre-t-il l'interface et rend-il l'accès aux données plus difficile ?

3voto

Marc Gravell Points 482669

Cela dépend du scénario. WCF, par exemple, décore des interfaces pour les contrats d'opération.

Toutefois, si vous parlez de objets (plutôt que l'interface elle-même), notez qu'il peut être difficile pour le code appelant de se procurer les métadonnées de l'interface, en particulier si la classe utilise une implémentation explicite de l'interface.

Il serait plus commun pour décorer la classe, mais ce n'est pas tout à fait la même question ;-p

Si l'attribut est réellement spécifique au interface (et non les instances), alors très bien - décorez l'interface et parlez des typeof(IFoo) etc. Mais si vous voulez que le code puisse définir des valeurs par type pour les attributs, il faudra le faire au niveau de la classe.

Quel est le scénario ?

2voto

Andrew Hare Points 159332

Cela dépend si l'interface a quelque chose à voir avec les métadonnées.

interface IRunnable
{
    void Run();
}

class Test : IRunnable
{
    public void Run() { }
}

Dans cet exemple, il serait logique de placer les attributs sur l'interface s'ils ont trait à l'intention de l'interface. Si les attributs sont applicables à toutes les implémentations, ils doivent être placés dans l'interface.

Toutefois, si les attributs n'ont rien à voir avec l'"aptitude au fonctionnement" (l'"aptitude au fonctionnement" se rapportant à l'"aptitude au fonctionnement"), il convient d'en tenir compte dans le cadre de l'évaluation des risques. IRunnable pas le CLR) de la classe, puis mettre les attributs sur la classe.

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