gennemførelse af forretningsformål

, klasser, der opfylder valideringsregler, lægge grunden til en ægte objekt målrettet anvendelse.,, gennemførelse af forretningsformål, denne artikel er den første i en serie, som vi skal udforske de mange facetter af et sandt mål rettet anvendelse.på den måde, vi tager i næsten ethvert aspekt af applikationsdesign og sætte spørgsmålstegn ved nogle af de godkendte metoder til at skrive en delphi anvendelse.det grundlæggende princip bag denne metode er at udforme en indkapsling: sæt af klasser med veldefinerede grænseflader (metoder), der opererer på egenskaber.disse begreber skal gennemsyre hele anvendelsen og i høj grad vil påvirke den måde, hvorpå data lagres og fremlagt.jeg anbefalede læserne til at undersøgelse francis glassborow er c + + kolonne, selvom delphi objekt model ikke fuldstændige (og kompleksiteten af c + +, principperne for god klasse design er uafhængige af sprog,.,,, mest typiske delphi ansøgninger skrevet i dag ikke er objekt - orienterede.bare fordi de sprog har et objekt model, og mange af de eksisterende og nye kategorier anvendes, betyder det ikke, at ansøgningen kan betragtes som virkelig oo.kode genbrug er færdig med at komponenter fra tredjeparter på former, og indbyrdes afhængighed mellem former og enheder hurtigt breder sig.fremtidige muligheder for at ændre anvendelsen nøgletal (f.eks. skift database eller bevæger sig fra 2-tier til 3-tier gennemførelse) er stærkt begrænset, eller meget dyrt at overveje.skrive ansøgningen i en sand oo måde vil fremme snarere end at begrænse disse muligheder.men at skrive sådanne ansøgninger kræver en noget vagt, ledsaget af en indledende manglende produktivitet, at de fleste udviklingsgrupper modsætter eller ikke er i stand til at overveje.i løbet af disse artikler, håber jeg, at vise nogle af de grundlæggende principper, som vil hjælpe udviklere er flyttet til at gennemføre bedre ansøgninger.den deraf følgende systemer vil altid være mere pålidelige, pålidelige, sammenhængende, fleksible, genanvendelige og generelt bedre end en ansøgning skrevet i den normale måde.især fordelene ved kode klarhed er af en sådan art, at for store ansøgninger, skrevet i et virkeligt oo måde kan kræve betydeligt færre midler end den samme ansøgning skrevet vedligeholdelse traditionelt.måske skal jeg begrunde disse ydelser af en oo gennemførelse: jeg mener, at få det ind med noget at sælge (i dette tilfælde vision af bedre ansøgninger) vil væk stå uimodsagt.,,, øget pålidelighed af oo ansøgninger kommer fra den kendsgerning, at data, der er indeholdt i veldefinerede kategorier.de ansvarlige i sig selv vil fremme korrekt klasse, metode og ejendom anvendelse gennem stærk type kontrol, og som har enestående snarere end dobbelt kode betyder, at fremtidige ændringer til en enkelt rutine er udbredt i ansøgningen.en konsekvens af den korrekte anvendelse af klasser, er, at forholdet mellem dem er indlysende og en langt større del af den skriftlige kode faktisk gennemfører "kød" af anvendelsen, snarere end at bekymre sig om detaljer som, hvordan data rent faktisk er oplagret, konstant.det gør anvendelsen betydeligt lettere at opretholde en faktor yderligere forenklet ved større konsistens.som vi skal se, ved hjælp af klasse arv, omfattende både øger produktiviteten og pålidelighed, men også skaber sammenhæng.i denne sammenhæng er klart i den måde, denne kodeks er fastsat, og hvordan klasser adfærd, men også i det omfang, hvor data lagres, og hvordan brugergrænsefladen er forelagt.så meget for den funktion er fastsat i basen klasser, er det muligt hurtigt at ændre deres adfærd, at grundlæggende påvirke anvendelsen (som f.eks. ændring af grænsefladen til html baseret snarere end formen drevet).disse grundlæggende kategorier kan være beregnet til anvendelse uafhængig, således at den anden ansøgning skrevet på denne måde får en øjeblikkelig produktivitet, skub.et godt sæt base klasser kan udgøre op til 50% af kodeksen i en mellemstor anvendelse, en indlysende fordel fra en tid, omkostninger og pålidelighed stående.det er kun rimeligt, at fremhæve, at overgangen til "ægte" oo udvikling ikke er ubetydelige, og der bør kun foretages for første gang med erfarne bistand, eller for et projekt af ringe størrelse uden uopsættelige frister.det bør også understreges, at en oo løsning ikke diktere andre klasser, der skal eller ikke skal) anvendes inden anvendelsen.hvis et selskab har udviklet deres egne visuelle komponenter, anvendelse af en tredjepart, eller er standardiseret på en særlig database platform, så er der ingen grund til, at de ikke kan anvendes (med en væsentlig undtagelse).at udvikle en oo ansøgning om anvendelsen af et sammenhængende sæt af former for design, snarere end at diktere, hvad komponenter bør anvendes.,,, fokuserede klasser,,, det første skridt i udarbejdelsen af en samt anvendelse, er at tænke på de klasser, der vil være påkrævet.det er et helt afgørende skridt, som med enhver anden udvikling teknik, som galt på et tidligt stadium vil være dyrt at rette op på.i udformningen af vores klasse vi generelt bør stræbe efter lave kobling og høje samhørighed - klasser bør være så uafhængigt som muligt fra andre grupper, men bør kunne kombineres i magtfulde måder.en måde at opnå dette på er at kategorisere forskellige klasser af de roller, som de vil få i ansøgningen.skønsom udvælgelse af disse roller vil resultere i et sammenhængende sæt af klasser,.,,, der er en grundlæggende regel, som anvendes i hele klassen rolle udformning: stærk adskillelse af de klasser, der er ansvarlige for udformning, gennemførelse og vedholdenhed.præsentation kan generelt være opfyldt som brugergrænseflade, og udholdenhed, som noget, der lagrer data (typisk i en database).selv om det er den samme adskillelse, som findes for 3-tier udvikling, skal det bemærkes, at dette er en konstruktions - adskillelse, der kan gennemføres på mange måder: som en enkelt monolitiske anvendelse hele vejen igennem til en fuldt distribuerede flerstrengede system.sættet af klasser, der udgør anvendelsen logik, er dem, der rent faktisk gøre det hårde arbejde i forbindelse med bruger incitamenter til at manipulere og behandle data.en undergruppe af klasser i dette lag er identificeret som de enheder i den virkelige verden, som vil være inspireret af systemet.det er meget ofte mærkes som "forretning" eller "problem domæne" klasser.de udgør en vigtig del af enhver oo system, som de fleste andre grupper vil støtte dem på en eller anden måde, og de udgør en koncentration af alle udvikler engagement.,,, at virksomheden objekter for en given anvendelse generelt bliver instinktivt med erfaring, selv om der er en hel videnskab (eller er det kunst?)bag denne proces.det smukke ved oo sammenlignet med traditionelle teknikker, som f.eks. ssadm er, at processerne for analyse og udformning, som har udviklet sig opretholde samme enheder over hele: er det muligt at se en repræsentation af hver virksomhed objekt i hele ooa (analyse), ood (konstruktion) og i sidste ende selve gennemførelsen (ups).vi vil undersøge nogle af de teknikker til at identificere passende forretningsformål i fremtiden kolonner.for øjeblikket, vil vi gå ud fra, at disse processer er blevet udført.,,, kommunikationen mellem klasser, der findes i de forskellige lag (udformning, gennemførelse, persistens) er veldefineret og bør overholdes fuldstændigt.dette er vist i figur 1 og pilene viser, at en klasse i et lag kan gøre metode, opfordrer til en anden klasse.dette diagram viser, at præsentationen lag (user interface) kan manipulere anvendelsen lag eller andre klasser inden for brugergrænseflader, og at anvendelsen lag (business objekter) kan manipulere sig og gør krav på den vedvarende lag, som kun kan reagere på anmodninger fra anvendelsen lag.,,, forretningsformål,,, for at vise, hvordan erhvervslivet ting kan gennemføres, vil vi efter en bearbejdet eksempel med en lille gruppe af klasser, at den klassiske materiel, kunder og for enheder (en virksomhed tilbyder en række emner af materiel til salg, som kan købes (bad) af kunder).vores (ubetydelig) analyse har bekræftet, at det i første omgang vil vi kræve tre virksomheder, som repræsenterer hver af disse enheder.i vores delphi anvendelse har vi tre klasser: tstockitem, tcustomer og torder.liste 1 viser en forkortet offentlig grænseflade for disse klasser.det skal bemærkes, at alle attributter for den klasse er udsat for som egenskaber: det er simpelthen god klasse design og letter kontrollen med adgang til egenskaber (hvis det er nødvendigt).det bør også bemærkes, at de egenskaber er udsat i den offentliggjorte del af klasse (af grunde, som vi vil drøfte i fremtiden), og at de er fuldt kvalificeret til standardværdier, hvor det er relevant.selv om denne ejendom, der angiveligt er anvendt ved streaming komponenter, der tjener et nyttigt formål at angive den oprindelige værdi af hver enkelt ejendom og hjælper den kode for selv at beskrivende.,,, noget, der er grundlæggende for erhvervslivet (problem domæne) genstande, er, at de ikke kan få kendskab til, hvor de opbevares vedvarende.de ved ikke, hvor de er oplagret i databasen tabeller, rent faktisk kan gøre absolut ingen antagelser om oplagring overhovedet.en virksomhed objekt er en meget målrettet klasse, der udsætter passende egenskaber og de metoder, som er nødvendige for at manipulere med dem.ved udformningen af den offentlige grænseflade til klassen, ingen indrømmelser bør gøres som de typer af egenskaber for vedvarende (database) oplagring.du bør altid vælge de mest hensigtsmæssige type for den pågældende ejendom, uanset om de er bestemt database, støtter dem natively.et godt eksempel er en ejendom: få databaser støtte fastsættes direkte, men hvis det er en naturlig måde at afsløre en ejendom i en virksomhed modsætter det bør vælges i stedet for en anden repræsentation (eventuelt en række booleans).et andet eksempel er, at afsløre noget, der ligner en adresse, som tstringlist.det er ikke den rolle, der spilles af business objekt, berører det er grænseflade til fordel for en database: dette er en opgave for den udholdenhed, lag.,,, vores første rammer, har vi identificeret og gennemført tre forretningsformål som udgangspunkt for vores anmodning.disse tre ting deler en fælles rolle: at repræsentere den enheder på en eller anden måde.derfor forventer vi at have ensartede egenskaber og derfor er en klasse hierarki er passende.vi vil give hver af disse genstande, en fælles forfader, kaldet tpdobject (for problematiske område genstand).det tpdobject klasse vil blive udvidet, efterhånden som vi indfører fælles metoder og egenskaber, som gør, at vores klasser.det skal bemærkes, at tpdobject indeholder ikke og vil aldrig) anvendelse specifikke elementer.som en ansøgning uafhængige opbygge det skal anbringes i en separat enhed og danner grundlag for en ramme: et sæt af kategorier, der kan anvendes til mange formål.over tid for vores rammer vil udvide i høj grad til at give mange base klasser, som yder betydelige anvendelse uafhængig funktionalitet, klar til at være specialiseret i bestemte systemer.vores tstockitem, tcustomer og torder klasser er eksempler på særlige versioner af generiske tpdobject.en nærmere undersøgelse af liste 1 viser, at vores tre problematiske område klasser hver nedstammer fra en anden klasse, tmyapppdobject, som i sig selv er en efterkommer af tpdobject.selv om gennemførelsen af tmyapppdobject er tom, det er endnu et eksempel på god klasse konstruktion, således at vi, hvis vi ønsker at give enhver ansøgning specifikke elementer til alle vores problem område objekter, der er en hensigtsmæssig klasse i vores hierarki.,,, med 2 viser vores embryonale ramme enhed.i øjeblikket er tpdobject klasse giver kun en read - only ejendom kaldes id, som er af en type tobjectid.denne ejendom benyttes til at give hver klasse begrebet identitet. vi vil definere to eksempler, som repræsenterer de samme formål, hvis de er af samme type og har samme id - værdi.det er bevidst blevet defineret som sin egen type, så det er ikke direkte opgave er forenelig med andre scalar - typer.valget af type tobjectid er vilkårlig: jeg har valgt i dette tilfælde, at gøre det til et heltal, type, men der er en sag for at gøre det det er egen klasse.selv om en mere "rene" tilgang, jeg har udtalt sig imod dette på det grundlag, at vores problem område genstande vil blive konstrueret (og ødelagde mange tusinder af gange i løbet af en ansøgning, og at vi kan undgå de omkostninger til opførelse og ødelægger den ekstra tobjectid klasse (min puristiske argument for denne gennemførelse valg, er, at særskilt tobjectid klasse været indordnet under de tpdobject klasse som en sammensat formål).der er et par ekstra metoder i denne enhed til at omdanne vores objekt identitet type til en streng repræsentation og en konstant til den oprindelige "har ingen identitet" værdi, er der en række meninger om objekt identitet, siger man, at alle genstande bør tildeles en identitet, når det er fremstillet og at den identitet, skal være entydig i en ansøgning (eller endda globalt som en vejviser).i praksis er det vigtigt kun at være i stand til at skelne mellem to ting i en given kontekst, og at holde det enkelt er indlysende resultater og oplagring fordele, men du vil ikke finde mig at argumentere mod et valg for en mere kompleks type i passende forhold.,,, et spørgsmål om etik,,, med henblik på at fremhæve nogle af de design og gennemførelse af beslutninger, der er truffet i forbindelse med udformningen af en ramme, jeg vil stille spørgsmål, og opfordrer læserne til at overveje rationalet bag dem.i begyndelsen af kolonnen, jeg hentydede til en betydelig undtagelse til den erklæring, som en virkelig oo design ikke undsige brugen af bestemte kategorier.hvad er en undtagelse til denne erklæring (tip: svaret ligger i figur 1).,,, (((liste 1 - en ansøgning specifikke problem område enhed (forkortede)))), enhed problemdomain;,,, grænseflade,, anvender, rammer,,,,,,,,, tmyapppdobject = klasse (tpdobject),,,,,,,,, tstockitem = klasse (tmyapppdobject), offentliggjort, ejendom navn: string;,, ejendom quantityinstock: kardinal misligholdelse, 0;,, ejendom tradeprice: valuta, ejendom, detailsalgsprisen: valuta,,,,,,, tcustomer = klasse (tmyapppdobject)...,,,,,,, torder = klasse (tmyapppdobject).,,,, gennemførelse,,,.,, (((liste 1)), (((liste 2 - en ansøgning uafhængig ramme enhed)), enhed ramme,,,,,,,,, denne grænseflade,,, notassigned = 0,,,,,,,,, tobjectid = typen heltal,,, tpdobject = klasse, private, fid: tobjectid;, offentlig ejendom, id: tobjectid læse fid - default notassigned,,,,,,, funktion strtoid (værdi: string): tobjectid;,, funktion idtostr (værdi: tobjectid): string,,,, gennemførelse,,,,,,,.,, (((liste 2)), (((figur 1 - klasse interaktion oversigt)), (((figur 1)), siden i serie.



Previous:
Next Page: