Det är lite svårt att förklara, men något sånt här:
Jag har egna "typklasser" med data som jag fyller ifrån en databas. Dessa läggs sedan i en klass som implementerar "IList" och "IEnumerable". En typklass kan innehålla egenskaper som "ID" och "Name" tex.
När jag binder min data till en Repeater tex. så binder jag den helt enkelt mot min egen List-klass som är fylld med mina egna typklasser.
Detta funkar ju kanon och håller även bra prestanda.
När det då gäller att uppdatera data, så skapar jag ifrån min klient en instans av en typklass som jag sedan fyller med data från olika textbox-kontroller tex.
Jag skickar sedan typklassen som en parameter till en "INSERT"-metod i min BL tex.
I denna metoden anropar jag mitt DAL där jag har skrivit en metod som dynamiskt skapar Parametrar (använder Reflection) från en typklass. Men det är ju inte alltid som alla egenskaper i en viss typklass ska användas som parametrar, och det är här mina Attributes kommer in.
Jag har nu skapat en egen Attribute-klass där jag angett att den endast får användas för Properties. I Attribute-klassen finns ett antal booleaner som anger hur denna property ska användas för parameter-logik.
Vid varje Property som jag sen skapar så sätter jag även dit ett Attribute där jag i konstruktorn skickar med hur parametrarna ska hanteras. Vilket attribut som ska användas hämtar jag med Reflection och Attributes.GetCustomAttribute().
Exempel på användning kan vara:
ID ska skickas med som parameter vid UPDATE/DELETE med inte INSERT.
Name ska skickas med som parameter vid INSERT/UPDATE med inte DELETE.
I systemet kommer jag att ha mängder med typklasser, och uppdaterings-rutiner. Då jag har byggt mina basklasser och implementationer generalla kommer jag nu tjäna massvis med kod, men jag kommer ändå att ha full kontroll på hur data bearbetas vid parameter-frågor (Administration).
Kan även tillägga att jag i min Attribute-klass skapat en flexibel lösning för att kunna hantera olika sorters special-fall.
Ja...det var väl ungefär hur det är tänkt. Allting funkar perfekt och flödet känns väl genomtänkt och fungerande.
Det enda jag alltså inte har full koll på är hur detta påverkar prestandan. Vid administrationen så använder jag somsagt Reflection, vilket jag vet är lite sämre för prestanda, men vid administrationssidor så gör det ofta inte så mycket.
Attributen jag använder för mina Egenskaper innehåller alltså bara ett antal Booleans, vilket inte borde innebära några stora prestandaförluster.