Você acha C # atributos (ou mecanismos similares) são uma boa idéia ou você desencorajar o uso deles?

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

Pergunta

Baseei muitos modelos e estruturas que o uso C # Atributos ao longo dos últimos 4 ou 5 anos.

Mas ultimamente eu vejo muitas pessoas openingly desencorajar o seu uso ou mudar suas estruturas para reduzir a necessidade ou uso deles.

Eu encontrei-los a ser uma dádiva de Deus, mas agora estou começando a me perguntar o que estou ausente.

Para esclarecer: Use convenção sobre configuração está se tornando um princípio importante a seguir especialmente no campo ORM. É nesta área que você pode mapear campos com um arquivo de configuração (XML), use um atributo, ou ter uma convenção de nomenclatura comum que mapeia diretamente para campos em suas tabelas de banco de dados. Eu não tenho quaisquer referências para citar, mas eu li alguns reação contra a adição de um outro atributo à mistura.

Mas eu sinto sobre as três opções Eu apenas listados que atribui ainda fazer mais sentido. Um arquivo de configuração é mais difícil de manter e uma convenção de nomenclatura comum os laços que para a implementação do campo de banco de dados. Os atributos são colocados exatamente onde eles são necessários eo implemntation pode mudar sem desligar a partir de onde ele é usado.

Foi útil?

Solução

Há realmente dois fins de atributos: como usuário coisas visíveis, e como as coisas emitidas por um compilador

.

Eu suponho que você está falando de atributos visíveis usuário.

Em geral, eu diria que os atributos visíveis de usuários não são ideais.

Na maioria das vezes eles são usados ??para incorporar alguma forma de linguagem personalizada no topo do C #. atributos DLINQ são um bom exemplo disso. Uma abordagem melhor, do ponto de vista do consumidor, seria adicionar suporte de primeira classe para a linguagem host. Que acabam se sentindo muito mais natural. (Com suporte ao idioma para a definição de tabelas e chaves estrangeiras seria muito mais fácil trabalhar com o então todos os atributos loucos linq-to-sql).

Na realidade, porém, estendendo uma linguagem de programação é muito custo proibitivo para a maioria dos desenvolvedores. Os benefícios só não fora pesar os custos.

Talvez um dia C # terá recursos de programação de meta, o que tornará a fazer esse tipo de coisa fácil.

No momento, no entanto, que a capacidade não existe.

Isso deixa você com 3 opções:

  1. atributos Use
  2. Use uma linguagem dinâmica, e gerar código em tempo de execução
  3. Só não use generativo programação

Geralmente # 1 acaba sendo a escolha mais fácil de fazer, mesmo que isso não é o ideal.

Outras dicas

Esta é uma pergunta difícil dar uma resposta geral para. Atributos são outro recurso de linguagem que são incrivelmente poderosa quando usada corretamente, mas têm o potencial para o abuso. Eu nunca vi uma razão convincente para despejar o uso de atributos completamente e realmente nenhuma razão para pensar que eles são uma má idéia.

Na verdade, o oposto é verdadeiro. Atributos permitem a adição de informações quadro específico para os metadados. Informações que simplesmente não podem ser facilmente expressas através de uma hierarquia de tipo. Isso aumenta drasticamente o poder de quadros que usam atributos.

Eu certamente visto uma implementação ou dois onde as pessoas abusaram deles um pouco, mas nada espetacular. Você pode ser mais específico? Existem específicos atributos / quadros que você está falando.

Essa é uma pergunta muito ampla, como "devo colocar queijo no meu caçarola"; A resposta a ambas é "isso depende do que você está fazendo".

Se você estiver fazendo uso pesado de addributes e usá-los quase como um paradigma de programação declarativa, então você provavelmente vai ter problemas ao longo do caminho. Se se trata de um lugar desaceleração na reflexão ou simplesmente manutenção geral é sempre uma incógnita.

É como tudo o resto ... usá-los quando eles são apropriados e tornar seu código mais eficiente ou legível. Não usá-los para o bem de usá-los, e não abandoná-los por causa de abandoná-los.

eu encontrá-los extremamente útil quando se trata de definir meta-dados sobre o meu código. Eu usá-los para gerar relatórios personalizados, para plug-in arquiteturas, e para comunicar ao código de terceiros.

Eu suponho que você pode fazer tudo por convenção, mas eu gosto deles.

Eu vejo uso pesado de atributos em ASP.NET MVC. Na verdade, a mudança para MVC me levou a aumentar o meu uso de atributos de forma significativa. Eu não tenho certeza de onde sua percepção da reação anti-Atributo está vindo, mas eu certamente não vê-lo de MS, pelo menos no que diz respeito ao MVC.

Eu particularmente gosto da maneira que atributos podem ser usados ??para fornecer o comportamento transversal (aspectos) através daqueles controlador / ações que são tão decorados. Vendo como MVC é construído para lidar invocação atributo antes e depois da invocação ação, eu tenho que acreditar que esta é a forma preferida para obter aspectos de trabalhar em MVC.

Bem, se ASP.NET MVC é qualquer coisa ir perto, eu diria que não se preocupe com isso. Tanto é feito em que Framework usando reflexão e atributos, que não vejo qualquer problema com ele. MVC é um relativamente novo quadro, e é usado em todo o lugar. De validar a entrada, tratamento de erros, ao atributo muito incrível ActionFilter, há um monte deles. Então, não, eu, pessoalmente, não vejo nada de errado com eles.

Eu pessoalmente acho atributos, como a maioria dos recursos de linguagem, têm o seu lugar, mas pode ser abusado ou mal utilizado.

No âmbito correta, eles são inestimáveis. Eles coisas definitivamente Simplifique como estruturas DI ( MEF é um grande exemplo), e são muito, muito útil para coisas como testar estruturas.

Eu acho que vai loucos atributos definidos pelo usuário adicionando pode ser um exagero, no entanto. Eu, pessoalmente, adoro usando atributos, mas tente manter o seu uso ao mínimo, e só usá-los onde eles fazem mais sentido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top