vedvarende objekter

, protesterer data i sidste ende skal lagres i en database.denne artikel viser dig hvordan.,, vedvarende objekter, i de sidste par artikler har vi indført forretningsformål og vist, hvordan simple forhold kan være repræsenteret.de relationer, udtrykt som objekt egenskaber er en mere formel (og neutral) repræsentation af forholdet mellem data, enheder, der kan være implicitte i databasen, design eller eksplicit i databasen skema.de bevæger sig væk fra en data - centriske opfattelse af enheder og relationer til en mere struktureret, samt redegørelse har mange fordele, men de fleste sprog (herunder delphi) anvendes kun for en hukommelse objekt model; genstande har ingen medlemsstat persistens kapacitet, medmindre der er fastsat dem.,,, der er mange design løsninger på dette krav, og vi har allerede konstateret, at virksomheden (problem domæne) genstande, i sig selv ikke må kommunikere direkte med databasen.en passende udformning, er at have en række kategorier, der findes udelukkende som et objekt, grænseflade til databasen, og vil være ansvarlig for lastning og redde problem område genstand.vores problem er genstande ved intet om, hvordan deres stat er lagret på diskette, kun, at der er en særlig gruppe, der er ansvarlig for denne operation.det vil gøre en metode til genstande på en sådan indsigelse og uddelegere arbejdet til det, den første beslutning, der skal træffes, er at beslutte, hvordan vi skal kort objekter ind på databasen skema.selv om en række ting databaser findes de fleste virksomheder er standardiseret på en eksisterende rdbms, som de er behagelige og erfarne.at fremme en udvikling, skifte til en mere samt tilgang er svært nok uden at kræve, at de typisk store investeringer i et højt udviklet teknologi, er gengivet i en database, nye, ukendte.derfor er denne artikel vil fokusere på kortlægning af genstande til sql baseret rdbms, da dette udgør størstedelen af de installerede udvikling systemer.det skal dog understreges, at en af fordelene ved vores objekt model er, at den er fuldstændig arkitektur, neutral og kan anvendes på en lang række forskellige database topologies, herunder isam og object-based.,,, kortlægning af genstande til databaser, er det indlysende, og naturligt, at der er en forholdsvis enkel begrebsmæssige korrespondance mellem en genstand og en database tuple (register).derfor, når de objekt i en rdbms et meget almindeligt og praktisk løsning er at kortlægge et problem område klasser, tabeller, genstande til optegnelser og egenskaber til områder.bemærk, at fordi vores database vil være de formål, det skal være en fuldstændig repræsentation, og derfor er det sandsynligt, at der vil være flere områder i databasen, tabel end en given klasse er offentlig ejendom.i nogle tilfælde er offentlig ejendom, ikke kan have en direkte tilsvarende område, men det generelle princip er at kortlægge en ejendom i en database vedrørende lignende grundlæggende type (karakter, numerisk, dato, osv.), lad os nu udvide vores grundlæggende ramme for at støtte objekt vedholdenhed.vores problem er genstande (tpdobject) skal tillade andre klasser, for at tvinge dem til at laste eller redde deres stat.der er en række alternative måder at nærme sig denne situation, er at tvinge alle genstande implicit redde deres stat, før de er ødelagt.i praksis er ansøgninger kræver en finere grad af kontrol over, hvor imod staten bør fortsat og vores tpdobject vil få to nye offentlige metoder, belastning og redde.save - metode er parameterless, men vores last metode skal definere nøjagtigt, som har til formål at blive hentet fra vedvarende butik.inden for rammerne al problem område genstande, som er blevet reddet, tildeles et unikt id i en bestemt sammenhæng (dette kan være inden for genstande af samme klasse, genstande af samme afstamning, anvendelse eller almindeligt).vi vil bruge det her id som et parameter for at lasten metode til at standardisere på de midler, som vi fastlægger genstand identitet.bemærk, at dette altid anvendes, selv om en bestemt klasse kan have en egnet alternativ "primære nøgle" - konceptet.standardisering på et enkelt begreb objekt identitet er nyttig, idet den ramme, kan anvende denne sammenhæng at behandle vores problem område objekter i en generisk og polymorphic mode.nogle vil måske spørgsmål, tilstedeværelse af en offentlig ejendom (omend kun), der afslører en type valgt for nemheds skyld passer til de optegnelser af vores rammer.i praksis, identifikation af genstande af id - er noget, der foregår næsten udelukkende inden for rammerne af kode og er sjældent støder på inden for rammerne af den faktiske anvendelse logik.inden for det felt, som håndteres ved hjælp af begreber meget bedre kendskab til slutbrugeren, som f.eks. "en række kunder" smith ", snarere end gennem udvikler orienterede abstracts.,,, efter at have defineret de offentlige metode grænseflade på vores tpdobject problem område klasse, vi nu skal overveje gennemførelse.faktisk er det meget enkelt.vi har allerede sagt, at det objekt ved intet om, hvordan det er oplagret, kun, at der er en anden ting, der har ansvaret for denne opgave.derfor er gennemførelsen af vores vedholdenhed metoder på tpdobject kun uddelegere arbejdet direkte til et andet formål, som der er henvist til i en privat område.hver af disse metode kræver, er parameterised med sig selv, således at de delegerede objekt ved som instans handler.faktisk, når et problem er objekt er pålagt at redde (eller last) i sig selv, men blot pålægger et objekt til at "redde".,,, dataforvaltning,,,, at faktisk redde genstand til en database, falder til et sæt af klasser i datastyring lag.det vil vi have en klasse hierarki, som giver os mulighed for at yde en betydelig database uafhængige funktioner.alle vores klasser, der er ansvarlig for forvaltningen af data vil stige ned fra et abstrakt tdmobject klasse.denne kategori omfatter en object-based, database, uafhængige grænseflade for database operationer.specifik database, der ydes støtte ved at skabe en konkret efterkommer af denne klasse, der giver en forbindelse til databasen for valg, hvilken teknologi der er passende, og desuden giver nogle grundlæggende tjenester.disse grundlæggende tjenesteydelser, vil være fuldstændig tilpasset til de særlige forhold i den pågældende database, og vil blive anvendt ved anvendelse af efterkommere skræddersyede til håndtering af en bestemt tpdobject.denne konstruktion ikke diktere de midler, som den tdmobjects kommunikere med databasen motor: hver database lag er frit for at vælge den mest hensigtsmæssige (letteste /hurtigste) teknologi, der er til rådighed.det kan være alt for sql - 7, ibexpress for interbase, bde for paradoks filer, en skik api - og det er muligt at grænseflade til noget, der ligner odbc eller corba for generiske behandlinger.jeg vil foretrække at optimere forbindelse ved hjælp af en database, der af komponenter, hvis disse er generelt yder den største funktionalitet og hastighed.bemærk, at udvælgelsen af en database af api - ikke begrænser deres anvendelse til at løbe med denne database er det muligt at erstatte en database af tdmobject lag for en anden.grænseflade til tdmobject er rent objekt baseret på, så det kan garanteres, at der, såfremt vores database lag gennemføre de konkrete metoder anvendes korrekt, vil løbe ens uden ændringer.,,, den faktiske gennemførelse af hver database specifikke lag vil afhænge af den pågældende database, men i almindelighed for sql i stand til databaser, er det umagen værd at give en generisk henrette kommando, der tager et gyldigt sql kommando som parameter.når vi har en tdmobject efterkommer en valgt database, skal vi sørge for en række efterkommere af denne klasse, en for hver tpdobject i vores anvendelse.disse vil blive skræddersyet til at håndtere en meget specifik kombination af at redde en bestemt klasse i en særlig database.de nærmere oplysninger om disse klasser, afhænge af de elementer, der er fastsat i datastyring klasse for den pågældende database, men et element er afgørende: save - operation, skal aflevere id af objektet reddede.grunden til dette er, at i den valgte model, en tpdobject ikke har id til første gang, det er reddet.en særlig fordel ved denne model er, at det er meget let for dataforvaltning lag for at undersøge, om det er nødvendigt at skabe et sæt eller ajourføre - database.typisk, tildeling af id - kan ske ved et objekt, der er konstrueret udelukkende til dette formål, men der er en meget positiv optimering, der kan gøres, hvis vi er afhængige af vores data management objekt til at gøre denne opgave til os.kan du huske, at vores id skal være entydig i en bestemt sammenhæng, hvis forbindelse valgt at genstande af samme klasse har unikke id, så det kan sidestilles med registre i tabellen under unikke id 'er. de fleste databaser har mulighed for at skabe unikke id er indsat optegnelser sekvens, og gøre denne værdi, der er til rådighed efter databasen ajourføres.ved hjælp af denne facilitet i vores data management lag kan undgå at gentage forsøg på at sikre særegenhed, og i bedste fald kan redde den fremmede database operationer ved fastlæggelsen af den næste til rådighed. hvis den valgte database mangler sådanne træk, så en intern ordning for forvaltning af id - fordelingsnøgle data hierarki kan anvendes.,,, liste 1 viser udvidelser vores ramme enhed til støtte for belastning og redde aktiviteter sammen med retningslinjer for en klasse at håndtere data adgang til en database med nu.det antages, at den samme forbindelse er blevet oprettet, og dine rutiner findes inden for klassen til at henrette sql kommandoer og håndtere de modtagne data.i denne gennemførelse efterkommer klasser er forpligtet til at tilsidesætte den belastning, metode og også for at fastsætte et nyt sæt og ajourføre gennemførelse.det er let at se, at disse tre metoder bør skabe passende sql kode og ajourføre de ting fra den resultset (eller omvendt).med en lidt større indsats er det muligt at lægge mere arbejde inden for generiske tado_dmobject klasse selv, om indførelse af en mere stiv grænseflade på efterkommer klasser, som kræver mindre gennemførelse.et eksempel kunne være forfader klasse skaber sql kommandoer dynamisk, idet en række ejendom navne og værdier,.,,, vores klasse specifikke data management genstande (f.eks. tcustomerdm, svarende til tcustomer), skal have et indgående kendskab til de optegnelser af pd - objekt, som det er ansvarligt for.i denne forstand, kan de betragtes som "ven" klasser af problemet område genstand og i delphi betyder dette, at gennemførelsen skal være i samme enhed.,,, denne artikel er problem, vores projekt kræver en tdmobject skal angives for hver tpdobject.hvor og hvornår kan denne bestemmelse finder sted?hvad er problemet med denne tilgang, og ved at analysere mønsteret for metode kræver, at vores tdmobjects, hvordan kan det blive omgået.,,, (((liste 1 - data management genstande og grænseflader)), enhed rammer;,, grænseflade, type, tdmobject = klasse;,, tpdobject = klasse, private, dmobject: tdmobject;,, fid: tobjectid;, offentlig procedure belastning (denne id - tobjectid);,, procedure redde,,,,,,, tdmobject = klasse, offentlig procedure belastning (pdobject: tpdobject; denne id: tobjectid) virtuelle og abstrakt,,, funktion, redde (pdobject: tpdobject): tobjectid; virtuelle og abstrakt,,,,,,,,,, tado_dmobject = klasse (tdmobject), private, fado: tadoexpress;,, beskyttet, //forhold til fordel for børn til at interagere med database, procedure henrette (sql: string), ejendom, nu tadoexpress læse fado; //metodedet efterkommere skal give, funktion, indsæt (denne pdobject: tpdobject): tobjectid; virtuelle og abstrakt,,, procedure ajourføring (denne pdobject: tpdobject) virtuelle og abstrakt, offentlig, funktion og redde (pdobject: tpdobject): tobjectid; gearvalg;,,,,,, gennemførelse, procedure tpdobject. belastning (denne id: tobjectid), begynder, hævder (dmobject < > 0, ingen data management objekt, der er til rådighed), dmobject. belastning (self - id);,,,,,, procedure tdmobject. redde;, begynder, hævder (dmobject < > 0, ingen data management objekt, der er til rådighed), fid: = dmobject. redde (selvstændige),,,,,,, funktion tado_dmobject.save (pdobject: tpdobject): tobjectid;, begynder, hvis pdobject.id = notassigned så begynde, fører = indsættes:(pdobject);,, ellers begynder, opdatering (pdobject);,, resultat: = pdobject. id,,,,,,,,,,.,,, (((liste 1)), næste i serier,,,



Previous:
Next Page: