Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

 Jens Bennedsen 2002Objektorienteret systemudvikling1.1 Objektorienteret design Persistens - introduktion.

Lignende præsentationer


Præsentationer af emnet: " Jens Bennedsen 2002Objektorienteret systemudvikling1.1 Objektorienteret design Persistens - introduktion."— Præsentationens transcript:

1  Jens Bennedsen 2002Objektorienteret systemudvikling1.1 Objektorienteret design Persistens - introduktion

2  Jens Bennedsen 2002Objektorienteret systemudvikling1.2 Mål Hvilke mål er der for persistens? –Transparens Det er ikke synligt i koden at systemet er persistent Systemet kan køre uden fil el. andet er tilstede –Sikkerhed Alle data er intakte uanset crash –Kun relevante dele af systemet i memory ad gangen Gigantisk model –Data er tilgængelige andre steder fra Standardiseret format data gemmes i –Kode ændringer i model medfører små ændringer i persistensdel Det skal være muligt at tilføje/fjerne/ændre i model uden at persistensdelen skal radikalt ændres –Platformsuafhængighed mht persistensdel Der skal kunne anvendes flere databaser el. andet.

3  Jens Bennedsen 2002Objektorienteret systemudvikling1.3 Undervisningsform Vi ser overordnet på en række løsninger –Stigende kompleksitet –Stigende mængde af ønsker der imødeokmmes –Som applikationsprogrammør Brug af framework (Gen-)brug af andres kode

4  Jens Bennedsen 2002Objektorienteret systemudvikling1.4 Overordnede løsninger 1.Hent og gem ved opstart/afslutning 2.Som 1 men med transparens 3.Sikkerhed mod crash - løbende hent/gem 4.”Persistenslager” altid synkront med model Transparensgrad Opdateringshyppighed Start/slutpr. x minutter”altid” 1 234

5  Jens Bennedsen 2002Objektorienteret systemudvikling1.5 Gennemgående system

6  Jens Bennedsen 2002Objektorienteret systemudvikling1.6 1. Load/store ved opstart/nedluk Controlleren holder hele modellen og henter/gemmer den Controller.loadModel("model.dat"); /* Here we could go into the message- * processing loop of a message driven * GUI application. Instead we just call a * method on the TestDriver. */ TestGUI.runCommandLoop(); Controller.storeModel("model.dat");

7  Jens Bennedsen 2002Objektorienteret systemudvikling1.7 2. Hent/gem m. transparens Der skal laves kode i Controlleren til at gemme/hente alle containere – det kan gøres generelt Man skal registrere de objekter der ønskes gemt public static void registerRoots(PersistenceController pc) { pc.registerRoot("Controller", "teachers"); pc.registerRoot("Controller", "students"); pc.registerRoot("Controller", "courses"); }

8  Jens Bennedsen 2002Objektorienteret systemudvikling1.8 3. Sikkerhed mod crash Ved den forrige løsning er modellen i memory og på disk kun konsistent ved opstart og nedlukning Gem modellen med faste mellemrum –”Persistenslager” overholde evt. ikke invariant

9  Jens Bennedsen 2002Objektorienteret systemudvikling1.9 4. Opdateringshypighed: ”Altid” Serialisering giver ikke mening! Anvendelse af en relationel database –Simpel mulighed for mere finkornet opdatering –andre kan anvende de genererede data –få alle fordele fra en RDB I de tidligere løsninger kan RDB også anvendes!

10  Jens Bennedsen 2002Objektorienteret systemudvikling1.10 Arkitektur af persistensframework Model Persistens- controller Observer Observer Subject (Observable) Observer DB

11  Jens Bennedsen 2002Objektorienteret systemudvikling1.11

12  Jens Bennedsen 2002Objektorienteret systemudvikling1.12 Konkret løsning Persistens- controller Observer Observer Subject (Observable) Observer Model Controller DB 1: notifyObservers2: update 3: UPDATE … SET … WHERE …

13  Jens Bennedsen 2002Objektorienteret systemudvikling1.13 Konkret løsning Database skema konstrueres automatisk på baggrund af klassemode –refleksion –transient Anvendt database: MySQL –mapning af typer til DB-typer

14  Jens Bennedsen 2002Objektorienteret systemudvikling1.14 Applikationsprogrammør Modeltilstandsændrende operationer –Konstruktør –Modifiers (f.eks. set-metoder) public Student(…, boolean graduated) { … this.graduated = graduated; Controller.notifyObservers( new ModelChangeDescription(this, ModelChangeDescription.created, null) ); } public void setGraduated(boolean graduated) { this.graduated = graduated; Controller.notifyObservers( new ModelChangeDescription(this, ModelChangeDescription.changed, "graduated") ); }

15  Jens Bennedsen 2002Objektorienteret systemudvikling1.15 Applikationsprogrammør (2) Hvem skal være observable? –Alle modelobjekter eller Containerklasserne public class Controller { private static PersistentLinkedList teachers; … private static class publicSetChangedObservable extends Observable { // make the setChanged method public, so that Controller can call it public void setChanged() { super.setChanged(); } }; private static publicSetChangedObservable modelObservable = new publicSetChangedObservable(); …

16  Jens Bennedsen 2002Objektorienteret systemudvikling1.16 Registrering hos Observer


Download ppt " Jens Bennedsen 2002Objektorienteret systemudvikling1.1 Objektorienteret design Persistens - introduktion."

Lignende præsentationer


Annoncer fra Google