[.NET / C#] Method "monitor" attribute.

Pagina: 1
Acties:

  • cablepokerface
  • Registratie: Januari 2001
  • Laatst online: 24-02 19:22
Uitdaging.

Het probleem is als volgt, we maken op de afdeling software die met alles moet integreren behalve de keuken gootsteen. Denk aan websphere mq, msmq, ibm mainframe, oracle, mssql, webservices (java/vb6/.net), ldap en ik vergeet er nu vast nog een paar.

Om deze reden hebben we natuurlijk wat complexe processen staan, we zijn afhankelijk van veel systemen die ons soms gewoon simpelweg tegenwerken (ik vermoed expres zo nu en dan :-). Hoewel we hier in onze architectuur zoveel mogelijk rekening mee houden (OO, loosly-coupled programmeren, SOA, etc.) blijven sommige dingen gewoonweg bewerkelijk, je kent het wel.

iets wat ons in deze misere vaak/veel heeft geholpen is intensive logging, we kunnen (voor bugtracen) de logging zo zwaar zetten dat stacktraces eindeloos naar files worden geschreven, method calls loggen de inhoud van hun argumenten en hun return types en waardes, etc. Dit heeft ons al veel geholpen.

Ik ben echter zat om in iedere method een log code regel te schrijven boven en onderaan die de argumenten en return type logt:

code:
1
2
3
4
5
6
7
8
9
10
// (pseudocode)
public string JustReturnThis(string whatever)
{
  LogWrite(MethodName, Arguments);

  whatever += " bla";
  
  LogWrite(MethodName, ReturnValue);
  return whatever;
}


Wat ik dus wil is het volgende: Ik wil een attribute die naar de class kan kijken waaraan hij geattached zit en naar method calls kan luisteren binnen deze class zowel pre als post method calls. vervolgens gebruikt hij reflection om de method arguments op te halen en return type. Dit alles zodat ik in 1x kan zeggen tegen een class: "Log alles maar".

ik zeg attribute want dat is omdat ik denk dat dat het wel zal worden, maar als je goede ideeen hebt, ik ben een en al oren.

Google hielp niet.

dit == Tricky, ik ben benieuwd naar jullie input.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Mischien moet je eens kijken naar Aspect oriented programmeren. Whoam heeft er in dit topic een voorbeeldje van whoami in "\[C#] ParameterInfo vs values".

Voor zover ik weet is het met een Attribute niet mogenlijk automatisch code uit te voeren. Je zult dan toch ergens bij de aanroepende method controleren op het attribute.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
Inderdaad. Hèt voorbeeld van een crosscutting concern. AOSD zorgt hiervoor natuurlijk voor de oplossing, alhoewel aspects mijns inziens in .NET nog niet zo goed ingeburgerd zijn.
Natuurlijk is er wel Spring.NET, maar ik weet niet precies hoe mature het AOP gedeelde ervan is. Maar voor logging concerns zal het wel volstaan. :)
dit == Tricky, ik ben benieuwd naar jullie input.
Er is daar niet veel tricky aan eens je de concepten van aspecten doorhebt. Het logging concern is zelfs doodeenvoudig :+

[ Voor 22% gewijzigd door Feyd-Rautha op 09-11-2006 19:59 ]

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.