Vra

Watter soort dinge het jy gebruik persoonlike NET eienskappe in die werklike wêreld?

Ek het 'n paar artikels oor hulle te lees, maar ek het nog nooit gebruik persoonlike eienskappe.

Ek voel asof ek hulle kan uitkyk oor wanneer hulle nuttig kan wees.

Ek het dit oor eienskappe wat jy skep, nie dié wat reeds in die raamwerk ingesluit.

Was dit nuttig?

Oplossing

Ek het hulle gebruik "persoonlike" skryf vir bekragtiging (dws. Nasien van 'n veld te bekragtig met my eie "kredietkaart bekragtiging") en persoonlike LinqToLucene ontleder Ek het geskryf (dws. Spesifiseer watter ontleder om te gebruik op 'n gegewe veld).

Die validering kode, byvoorbeeld, sou so iets lyk:

public class Customer
{
     [CreditCardValidator]
     string creditCardNumber;

     [AddressValidator]
     string addressLineOne
}

Wanneer die voorwerp hierbo bekragtig, word elke veld bekragtig met die toepaslike validator te danke aan die "persoonlike" kenmerk.

In die LinqToLucene dinge wat ek geskryf het persoonlike eienskappe is mooi omdat hulle toelaat dat jy spesifieke velde te hardloop tyd te vind (deur nadenke). Byvoorbeeld, as jy 'n kliënt voorwerp, jy mag belangstel om al die eienskappe wat reeds gemerk as wees "indeks my": 'n persoonlike kenmerk kan jy dit doen maklik aangesien dit meta-data oor die voorwerp op 'n wyse ontbloot wat is maklik om te bevraagteken.

Ander wenke

Ek het 'n script enjin, en gemerk verskillende metodes met die [Command] kenmerk. Dit het beteken dat hierdie funksies is blootgestel aan die script enjin.

Voorbeeld:

[Command(HelpText = "Lists active users")]
void ListUsers(void)
{

}

[Command(HelpText = "Terminate a specific user's connection")]
void EndConnection(int userID)
{

}

En as gebruik:

MyScriptEngine>>  Help
Available Commands are:
    ListUsers: Lists active users
    EndConnection {userID}: Terminate a specific user's connection

MyScriptEngine>> EndConnection 3
    User 3 (Michael) has had his connection terminated.

MyScriptEngine>>

Onder andere, ek het hulle gebruik om EBNF wat lees by run-time persoonlike parsers op die vlieg te skep spesifiseer en ook om metadata spesifiseer oor velde vir 'n databasis.

Ek vind 'n mens patroon "Ek algemeen gebruik van persoonlike eienskappe is om enums vervang veral wanneer daar is 'n afhanklikheid van die enum in diff plekke in kode.

Bv. Ek kan 'n enum vir 'n toestand van 'n voorwerp het. Op grond van hierdie toestand, ek het miskien 3 of 4 verskillende plekke in kode wat ek 'n "switch" van daardie enum sou doen en 'n paar operasie. 'N ander ontwikkelaar kan 'n fout maklik voer deur die toevoeging van 'n nuwe enum maar nie die hantering van in een van die skakelaar state elders in kode.

So om dit te vermy ek 'n persoonlike eienskappe om 'n statiese klas verklaar. Die persoonlike eienskappe is gelaai in die statiese konstruktor van die klas in 'n woordeboek en al die plekke in kode gebruik die woordeboek in plaas van skakelaar state. Die persoonlike kenmerk constructor bevat die 'harde-gekodeerde' waardes vir elke skakelaar verklaring gesê.

Ek het 'n paar voorwerpe afleveringen om 'n persoonlike (nalatenskap) formaat, en ek gebruik eienskappe te identifiseer watter lande moet serialized en hoe om dit te formatteer. Toe het ek 'n serializer dat enige voorwerp met hierdie eienskappe en gebruik nadenke kan neem om dit te formateer.

Ek het nie regtig gevind 'n gebruik vir persoonlike eienskappe soos van nog. Daar is 'n paar situasies waar ek thaught hulle kan gepas wees, maar het dit nie gebruik nie, want blykbaar die besinning wat betrokke is by die lees van persoonlike eienskappe is baie duur is.

Ek het geplaas persoonlike eienskappe op klasse binne "plug-in" DLLs. Dit laat 'n raamwerk om dinamies te ontdek beskikbaar inproppe, evalueer of hulle van belang is, en dan dinamies laai die kinders van belang.

In ons domein, die voorbeeld is inproppe wat model veral voertuie binne 'n gesin. Een plug-in vir 'n familie voertuig kan eintlik 'n model 'n paar voertuig modelle binne die familie voertuig (bv "MX-6", "Sonde"). As 'n ID of Model Naam is ingesluit as 'n persoonlike kenmerk skikking, kan ons vinnig 'n DLLs wat nie eens het persoonlike eienskappe ignoreer, en dan iemand wat nie 'n model van die voertuig van belang verder te ignoreer.

Ek het dit gebruik in een van die ORM raamwerke wat ek ontwikkel wat gebaseer is op die ActiveRecord patroon. Dit is dieselfde soort implementering wat beskikbaar is in LINQ, Castle projek ens is.

Die raamwerk was bekend as "SkyFramework", maar dit was nie opensource.

vir bv Net 'n rowwe voorbeeld ...

Jy sal soortgelyke voorbeelde in ander oopbron projekte sowel vind.

[Sky.Table ("user")]
public class User
{
    [Sky.Column ("username")]
    public string UserName;

    [Sky.Column ("pwd")]
    public string Password;
}

NOTA:. Die kenmerk "Table", "Kolomme" was die persoonlike eienskappe op daardie tydstip

Die ActiveRecord enjin ontleed die voorwerp vir hierdie eienskappe en genereer die onderskeie funksies vir CRUD ... ens ...

Net so, ek ontwikkel het 'n paar persoonlike eienskappe vir die identifisering van gedeeltes van kode wat gevolg moet word as maatstaf ... vir Bv ..

[Sky.BenchMark()]
public void LongRunningMethod(..)
{
}

Die gemerk met die bogenoemde kenmerke metodes is outomaties bank gemerk en 'n log gegenereer. Hierdie was 'n paar vroeër implementering.

Daar is 'n Apress boek beskikbaar oor die onderwerp .. Toegepaste NET Attribues wat van hulp kan wees vir jou.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top