none
Custom Attribute RRS feed

  • Pergunta

  • Passei hoje o dia tentando entender o recurso de atributes do .net.
    Mas algumas coisas ainda não ficaram claras para mim. A própria doc MSDN trata do assunto de uma forma muito superficial.
    Na minha visão, uma das possíveis utilidade para esse recurso é fazer validação de atributos de classes.
    Vamos supor que você tem que validar um atributo do tipo inteiro para que ele aceite apenas números primos. O algoritmo para isso é muitos simples e você pode fazer a validação usando os clichês getse sets.
    Mas e se você tiver que fazer essa validação em várias classes, você teria que replicar código ou optar por soluções não muito elegantes. Ou você pode criar um attributee decorar o atributo que precisa ser validado.
    Esse foi o material que mais se aproximou daquilo que tenho em mente, mas ainda não ficou claro.
    Alguém poderia deixar um exemplo, baseado no problema de números primos que citei, para que possamos analisar e tirar possíveis dúvidas por aqui?



    terça-feira, 9 de fevereiro de 2016 22:02

Todas as Respostas

  • Os attributes são muito úteis no MVC e na validação de dados. A grande vantagem é ter um código mais limpo, além da facilidade de uso. Na maior parte das vezes ele facilita muito a vida do desenvolvedor, mas existem estas questões de validações mais complexas. Nesse caso você pode optar por fazer sua validação da forma tradicional ou então implementar um custom Attribute.

    Segue um link de implementação de uma validação para exemplificar:

    http://codiply.com/blog/localization-and-custom-validation-in-asp-net-mvc

    terça-feira, 9 de fevereiro de 2016 23:29
  • Em .NET isso é trivial, ideal, espetacular, reduz a complexidade do código, mostra que com uma configuração eu possa escolher entre A ou B qual partido ou caminho devo tomar.

    Uma das suas utilidades pode ser validar campos de uma classe ou a classe propriamente dita. Tem também um simples atributo como meio de configuração de uma classe, exemplo:

    using System;
    using System.Runtime.InteropServices;
    
    namespace Code.Attributes
    {
        [AttributeUsage(AttributeTargets.Class)]    
        [ComVisible(true)]
        public sealed class CollectionName: Attribute
        {
            public string TableName { get; private set; }
            public CollectionName(string TableName)
            {
                this.TableName = TableName;
            }
        }
    }

    Essa classe acima é um atributo, como utilizar:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace Code.Models
    {
        [Code.Attributes.CollectionName("estudos")]
        public class Estudos
        {
    
            public Estudos()
            {
    
            }
    
            
            public int Id { get; set; }        
            public string Description { get; set; }
        }
    }

    A classe estudo tem um Atributo de Classe (atrributte) que diz qual é o nome da sua coleção.

    E agora como recuperar:

    CollectionName collectionName =  (CollectionName)System.Attribute.GetCustomAttribute(typeof(Estudos), typeof(CollectionName));

    Se você escrever assim:

    collectionName.TableName você recupera o valor do atributo (que no caso é "estudos")!!!

    Existem vários outros tipos e exemplos que são utilizados para mapear classes, validar classes, configurar classes, resgatar um elementos de um Session, Cookie, de Autenticação, então no mundo .NET isso é normalidade e realmente é bem válida o seu questionamento ...

    Perceba que no link que tu mesmo postou tem vários exemplos e utilidades.


    Fulvio C




    terça-feira, 9 de fevereiro de 2016 23:54