Pensez-vous que C # (attributs ou mécanismes similaires) sont une bonne idée ou ne vous décourager l'utilisation d'entre eux?

StackOverflow https://stackoverflow.com/questions/761537

Question

J'ai base de nombreux modèles et des cadres qui utilisent C # Attributs au cours des 4 ou 5 dernières années.

Mais ces derniers temps, je vois beaucoup de gens décourageant openingly leur utilisation ou de modifier leurs cadres pour réduire la nécessité ou l'utilisation d'entre eux.

Je les ai trouvés un don du ciel, mais maintenant je commence à me demander ce que je suis absent.

Pour clarifier: Utiliser Convention sur la configuration devient un grand principe à suivre en particulier dans le domaine ORM. Est-ce domaine, vous pouvez mapper les champs avec un fichier de configuration (XML), utilisez un attribut ou une convention d'appellation commune qui associe directement aux champs de vos tables de base de données. Je n'ai pas de références à citer mais j'ai lu une réaction contre l'ajout d'un autre attribut au mélange.

Mais je me sens au cours des trois choix que je viens d'énumérer que les attributs font encore le plus de sens. Un fichier de configuration est plus difficile à maintenir et à une convention de dénomination commune vous lie à la mise en œuvre du champ de base de données. Les attributs sont placés exactement là où ils sont nécessaires et le implemntation peuvent changer sans déconnecter d'où il est utilisé.

Était-ce utile?

La solution

Il y a vraiment deux buts d'attributs:. Que les choses visibles de l'utilisateur, et que les choses émis par un compilateur

Je suppose que vous parlez des attributs utilisateur visibles.

En général, je dirais que les attributs utilisateur visibles ne sont pas idéales.

La plupart du temps, ils sont utilisés pour intégrer une certaine forme de langage personnalisé au-dessus de C #. attributs DLinq sont un bon exemple. Une meilleure approche, du point de vue du consommateur, serait d'ajouter soutien de première classe à la langue d'accueil. Cela finissent par se sentir beaucoup plus naturel. (Ayant prise en charge linguistique pour définir des tables et des clés étrangères serait beaucoup plus facile de travailler avec puis tous les attributs fous LINQ to SQL).

Mais, en réalité, l'extension d'un langage de programmation est trop coût prohibitif pour la plupart des développeurs. Les avantages juste ne pas peser les coûts.

Peut-être qu'un jour C # aura des fonctionnalités méta-programmation, qui fera faire ce genre de chose facile.

À l'heure actuelle, cependant, cette capacité n'existe pas.

Cela vous laisse avec 3 options:

  1. Utilisez des attributs
  2. Utilisez un langage dynamique et générer du code à l'exécution
  3. Il suffit de ne pas utiliser générative programmation

En général # 1 finit par être le choix le plus facile à faire, même si ce n'est pas idéal.

Autres conseils

Ceci est une question difficile de donner une réponse générale pour. Les attributs sont une autre caractéristique de langage qui sont incroyablement puissant lorsqu'il est utilisé correctement, mais ont le potentiel d'abus. Je ne l'ai pas déjà vu une raison impérieuse de vider l'utilisation des attributs tout à fait et vraiment aucune raison de penser qu'ils sont une mauvaise idée.

En fait, le contraire est vrai. Les attributs permettent d'ajouter des informations spécifiques dans le cadre des métadonnées. Les informations qui ne peuvent simplement pas être facilement exprimé par une hiérarchie de type. Ceci augmente considérablement la puissance des cadres qui utilisent les attributs.

Je l'ai certainement vu une mise en œuvre ou deux où les gens les ont maltraités un peu, mais rien de spectaculaire. Peux-tu être plus précis? Y at-il des attributs spécifiques / cadres dont vous parlez.

C'est une question assez large, comme « dois-je mettre le fromage dans ma cocotte »; La réponse est à la fois « cela dépend de ce que vous faites ».

Si vous faites un usage intensif de addributes et de les utiliser presque comme un paradigme de programmation déclarative, alors vous allez probablement des ennuis le long du chemin. Que ce soit provient d'un ralentissement quelque part dans la réflexion ou tout simplement maintenabilité générale est quiconque conjecture.

Il est comme tout le reste ... les utiliser quand ils sont appropriés et rendre votre code plus efficace ou lisible. Ne pas les utiliser pour le bien de les utiliser, et ne les abandonnez pas pour le plaisir de les abandonner.

Je les trouve extrêmement utile en ce qui concerne la définition de méta-données au sujet de mon code. Je les utilise pour générer des rapports personnalisés, pour les architectures de plug-in, et pour communiquer au code tiers.

Je suppose que vous pouvez tout faire par convention, mais je les aime.

Je vois une utilisation intensive des attributs dans ASP.NET MVC. En fait, le passage à MVC m'a amené à augmenter mon utilisation des attributs de manière significative. Je ne sais pas où votre perception du jeu d'attributs anti-vient, mais je ne vois certainement pas de MS, au moins en ce qui concerne MVC.

Je aime particulièrement la façon dont les attributs peuvent être utilisés pour fournir un comportement transversal (aspects) à travers les contrôleurs / actions qui sont si décorées. En voyant comment MVC est conçu pour gérer l'attribut invocation avant et après appel d'action, je dois croire que c'est le meilleur moyen d'obtenir des aspects à travailler dans MVC.

Eh bien, si ASP.NET MVC est quelque chose d'aller, je dirais que ne vous inquiétez pas. Tant et si bien est fait dans ce cadre en utilisant la réflexion et les attributs, que je ne vois pas de problèmes avec elle. MVC est un cadre assez nouveau, et il est utilisé partout. A partir de la validation de l'entrée, la gestion des erreurs, à l'attribut ActionFilter très impressionnant, il y a beaucoup d'entre eux. Donc non, je ne vois personnellement rien de mal avec eux.

Je pense personnellement attributs, comme la plupart des caractéristiques linguistiques, ont leur place, mais peut être abusé ou mal utilisés.

Dans le cadre correct, ils sont inestimables. Ils simplifient certainement des choses comme des cadres DI ( est un MEF excellent exemple), et sont très, très utile pour des choses comme des cadres de test.

Je pense que vais les attributs définis par l'utilisateur d'ajouter fou peut-être exagéré, cependant. J'aime personnellement en utilisant les attributs, mais essayez de garder leur utilisation au minimum, et ne les utiliser où ils font le plus de sens.

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