Ik heb een vraagje voor de .NET2.0 guru's :
ik heb een base class voor mijn business objects, en diverse andere classes, die er als volgt uit zien :
in mijn implementatie ziet er dit dan als volgt uit :
Bij het toekennen v/d properties, word dan de IErrorprovider aangevuld dmv CheckRule
Wat ik mij nu afvraag : kan ik die lelijke cast 'delegate()' niet op een of andere manier laten vallen, of kan je niet zonder bij het gebruik van anonieme delegates ?
Ik zou natuurlijk ook als volgt kunnen werken :
maar dan kan ik geen uitgebreidere checks maken
Iemand ?
Op het net vind ik dit in elk geval nergens terug.
Ik zou er van uitgaan dat de compiler altijd een type check doet bij deze, dus zou het mij persoonlijk logisch lijken dat de compiler @compile-time checkt of het gaat om het type BusinessRuleDelegate, en de cast dus bijgevolg overbodig wordt, of heb ik het hier verkeerd ?
Weet er iemand een betere/propere manier om je business rules duidelijk gescheiden te houden in je business objects ?
ik heb een base class voor mijn business objects, en diverse andere classes, die er als volgt uit zien :
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
| public delegate bool BusinessRuleDelegate(); public class BusinessObject:IDataErrorInfo,IEditableObject { ... public void CheckRule(BusinessRuleDelegate brd, string message) { // implementeer IDataErrorInfo bij brd() = false; // vertaal errors etc ... } } |
in mijn implementatie ziet er dit dan als volgt uit :
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| public class TestClass : BusinessObject { private string name; public string Name { get { return name; } set { CheckRule(delegate(){return value != "Tom";},"Naam mag niet 'Tom' zijn"); ... name = value; } } } |
Bij het toekennen v/d properties, word dan de IErrorprovider aangevuld dmv CheckRule
Wat ik mij nu afvraag : kan ik die lelijke cast 'delegate()' niet op een of andere manier laten vallen, of kan je niet zonder bij het gebruik van anonieme delegates ?
Ik zou natuurlijk ook als volgt kunnen werken :
C#:
1
| CheckRule(value != "Tom","Naam mag niet 'Tom' zijn"); |
maar dan kan ik geen uitgebreidere checks maken
Iemand ?
Op het net vind ik dit in elk geval nergens terug.
Ik zou er van uitgaan dat de compiler altijd een type check doet bij deze, dus zou het mij persoonlijk logisch lijken dat de compiler @compile-time checkt of het gaat om het type BusinessRuleDelegate, en de cast dus bijgevolg overbodig wordt, of heb ik het hier verkeerd ?
Weet er iemand een betere/propere manier om je business rules duidelijk gescheiden te houden in je business objects ?