|
Forretningslag og valideringDer er flere grunde til hvorfor man skal prøve at inddele sine systemer i lag (f.eks. indkapsling for genanvendelighed og isolering, testbarhed, overskuelighed m.fl.). I VBScript er der forskellige måder at kode på, den mest populære er nok funktionsorienteret. Jeg vil dog kigge lidt på muligheden for at benytte klasser til at skabe lidt mere struktur og øge muligheden for at højne kvaliteten af den kode der produceres i dette sprog. En af udfordringerne med klassisk ASP er, at få testet sin kode, da mange (mindre projekter i det mindste) har tendens til at skabe en stor afhængighed af mellem brugergrænsefladen og forretningsregler/-logik. Typisk opnås dette ved at lægge regler for validering sammen med koden for rendering af skærmbilleder (HTML-koden) i samme fil. Det har flere ulemper, hvoraf et par af dem er
Større seperation og testbarhedEt middel er som nævnt at benytte en klasse til at samle logik vedr. et bestemt forretningsområde i en eller flere klasser, som sørger for at tingene kun skal vedligeholdes et sted og, som en sidegevinst, sørger for at det bliver væsentlig mere testbart. Det med test kommer jeg tilbage til i en anden artikel... Nu vil jeg kigge lidt på hvordan man kan koble validering på et forretningsobjekt. Jeg tager udgangspunkt i at der er to niveauer af validering, dels er der inputvalidering, dels forretningsvalidering. Inputvalidering er validering af formatet af de oplysninger som brugere angiver i brugergrænsefladen og sender til serveren. Den validering bør derfor altid foretages. Denne validering er baseret på strenge, da input typisk kommer i strengformat fra formularer. Denne validering skal være tilgængelig i den offentlige grænseflade på objektet, så den kan aktiveres i forbindelse med opdatering af objektets data. Forretningsvalidering er den validering som sikrer at data har nogle forretningsmæssige fornuftige værdier, dvs. skal en persons alder ligge mellem 18 og 25, så er dette en forretningsregel, hvor inputvalideringens rolle er at validere om alderen er numerisk. Lad os dykke!Lad os kigge på et konkret eksempel, så vi kan få lidt snask på fingrene...
class CPerson Der er et par pointer som skal observeres i ovenstående eksempel. ValiderInput benyttes som første trin i valideringen, samt som initiering af objektets værdier. Ved at sende objektets egenskaber ind som parametre til funktionen, kan man undlade at "input"-validere enkelte felter. Dette kunne f.eks. være interessant i tilfælde hvor man ønsker at opdatere en delmænde af et objekts værdier. Dette vil ikke få nogen effekt på den forretningsmæssige validering, da den altid udføres i forbindelse med kaldet til Gem (Gem bør som udgangspunkt være den eneste måde at få objektets data ned i databasen!) og vil derfor, hvis der er validitetsproblemer, give en fejl. De offentlige egenskaber er den direkte vej til at initiere objektets værdier, men her vil objektet, i modsætning til ValiderInput, rejse en kørselsfejl (dvs. en "typen stemmer ikke overens"-fejl), hvis typen af input ikke er i overensstemmelse med den forventede værditype. ValiderInput vil blot vedligeholde en liste med fejltekster som kan aflæses (via egenskaben Valideringsfejl på objektet), som kan præsenteres for brugeren. Når objektet gemmes (via kaldet til Gem-metoden), udføres forretningsvalideringen og hvis denne ikke går igennem, rejses der en kørselsfejl! Denne kørselsfejl kan fanges i en On Error Resume Next-sektion og valideringsfejlene kan derefter aflæses (som tidligere nævnt). Mere seperationSom det bliver indikeret i Gem-metoden, så opretter jeg et nyt objekt til at håndtere lagring af forretningsobjektets data. Dette gør jeg dels for at holde forretningslogik og databasetilgangslogik adskildt så det er lettere at skifte datalaget, dels for at holde en renere kode i mit forretningsobjekt så forretningsobjeket kun håndterer reelle forretningsregler. Denne fremgangsmåde kan godt virke noget omstændig i ASP, men jeg tror det er besværet værd, hvis man sidder med større projekter og i teams med flere udviklere, som dels har forskellige kompetencer indenfor de enkelte niveauer af systemet, dels har større behov for at ændre i samme forretningsområder (på forskellige niveauer) samtidig. |
| Sidst opdateret: 05-09-2010 00:34:10 |
|
Tilmeld link |
Tilføj Link |
Tilføj Link |
@-begynder Erklæring om beskyttelse af personlige oplysninger |