Presentation laddar. Vänta.

Presentation laddar. Vänta.

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License CliMate: Laboration 2 - domänlogik Human Centered Systems Inst. för datavetenskap Linköpings.

Liknande presentationer


En presentation över ämnet: "Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License CliMate: Laboration 2 - domänlogik Human Centered Systems Inst. för datavetenskap Linköpings."— Presentationens avskrift:

1 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License CliMate: Laboration 2 - domänlogik Human Centered Systems Inst. för datavetenskap Linköpings universitet

2 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License CliMate följer Tre-lager-arkitektur De tre lagren presentation: användarhändelser+grafik+resultat domänlogik: håller systemets funktioner databasaccess: databas + sql-hantering Paketen i CliMate: climate.ui (inkl climate.ui.action och climate.ui.update) är presentation climate.domain är domänlogik climate.database är databasaccess Varför lager: separera olika uppgifter i olika delar statisk uppdelning: vilken fil/klass gör vad

3 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Viktiga domänklasser i CliMate ObservationFile FileCollection Observation 1 n 1 n METDATA97010100 METDATA97010103.utf-16 METDATA97010106... FileIdentity: 97010100 Coding: ISO-8859-1 Motsvarande data: Long: 0.120000E+07 Lat: 0.766000E+07..förutom data (“tillstånd”) håller dessa klassers objekt systemets funktionalitet. Dessa två tillsammans kan man kalla domänlogik

4 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Domänobjekt - “domänlogiklagret” Domänlogiken uttrycker data och logiska operationer på data ex: observationer, filer, fil-attribut, inläsningfilter Domänobjekten håller aktuell data Domänobjekt är grunden i OO-design de förändras lite/sakta de är nära besläktade med problemdomänen tillstånd/data är viktigare än funktion: metoder kan läggas till gradvis

5 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Labb 2: uppgift 1 Visa inlästa filer lyssna på climate.domain visa resultat climate.ui.update.SaveFileListUpdate Göra knappar skapa grafik associera lyssnare climate.ui.SaveToDatabasePanel

6 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License JButton: grafik och swing-lyssnare javax.swing.JButton: skapar en knapp ex: JButton b = new JButton("I'm a Swing button!"); javax.swing.AbstractAction gör subklass ger en ActionListener se t ex ReadFileAction tilldela en lyssnare till en knapp ex: b.addActionListener(listener) CliMate använder metadata för text ex: metaData.get JButton JLabel JFrame Använd javadoc!

7 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Exempel: ReadFileAction “Läs” Plockar data från domänlagret Testar om alla data är ifylld annars popup Om allt är ok läs in från fil/katalog Anrop till domän! public void actionPerformed(ActionEvent a) { String filePath = coll.getStringProperty(FileCollection.Property.FILE_PATH); String sign = coll.getStringProperty(FileCollection.Property.SIGNATURE); if (filePath == null || filePath.equals("")) { log.debug("User attempted to read file without file path"); JOptionPane.showMessageDialog(null, metaData.get(Messages.SPECIFY_FILE_MESSAGE)); Data.get(Messages.SIGNATUR_TOO_SHORT_MESSAGE));... } else { try { coll.readFromFile(); } catch (FileNotFoundException e) {... }

8 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Ex: skapa lyssnaren på läs-knappen CliMate Window ReadFromFile Panel rf: ReadFile Action new readFileButton: JButton new addAction Listener(rf) Dvs framtida knapp-händelser till rf main

9 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License UI-objekt - “presentationslagret” Två typer av objekt: grafik: grafiskt innehåll och layout lyssnare: lyssnar efter händelser och agerar på dem Två typer av lyssnare: användarhändelser “action”: t ex Swing-lyssnare på komponenter systemhändelser “update”: t ex Observable/Observer på domänlogik CliMate climate.ui innehåller grafik-klasser climate.ui.action Swing-lyssnare climate.ui.update Observer-lyssnare

10 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Exempel: Användarhändelse “läs in” ReadFile Action FileCollectionObservationFile Observation Filter readFileBut: JButton actionPerformed readFromFile filterRow update...

11 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License JList: Swing-komponent för listor Används för att lista strängar eller andra swingkomponenter vertikalt eller horisontellt JList använder en JListModel som håller innehållet i listan uppdaterar man modellen uppdateras grafiken CliMate använder en subklass DefaultListModel

12 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Exempel: UI-update “ny fil inläst” till flik Spara SaveFileList Update DefaultList Model FileCollection update addElement Skapad av SaveToDatabase Panel

13 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Laboration 2 - uppgift 2 Spara observationer och fildata i MySQL-databas Editera i alla tre lagren för användarfallet “spara” Klasser som påverkas: SaveToDatabaseAction/Worker ObservationFile DatabaseService Sparandet ska ske så att flikens JProgressBar uppdateras kontinuerligt.

14 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Databas-access via JDBC (skiss) Java klient- klass java.sql.Connection Databa s Skapa Java.sql.Statement SQL anrop Creates Java.sql.ResultSet SQL Resultat

15 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Litet exempel på JDBC-koppling Class.forName(”com.mysql.jdbc.Driver”).newInstance(); String url = ”jdbc:mysql://maj4.ida.liu.se:bird_database”; Connection c = DriverManager.getConnection(url, "my_login", "my_password"); Statement stmt = con.createStatement(); stmt.executeUpdate(”INSERT INTO species VALUES”+ “('skata', 'Till Skottland')”); ResultSet rs = stmt.executeQuery(”SELECT * FROM species WHERE ” + ”name = \”skata\”"); rs.next(); String text = rs.getString(”migration_field”); System.out.println(”Skatans flyttvanor:”+text);

16 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License JDBC i Climate Klassen Database skapar ett java.sql.Connection-objekt val av host/databas/användare/lösen sätts i settings.properties Observera att endast ett Connection-objekt skapas per körning DatabaseService bygger SQL-statements och skickar via detta Connection-objekt

17 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Lagret för databas-access Avbilda objekt på relationer Enkel lösning: transaktionsskript (Fowler) hantera SQL i Java - “metaprogrammering” Separera ut SQL-källkod från löpande Java-källkod Hantera process-koppling värddator + sökväg föränderlig konfigureringsdata Hantera tillfälliga avbrott och omstart

18 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Modell-vy-kontroll (MVC) Modell VyKontroll prenumerera/n otifiera användar- händelser Förändra tillstånd...namnet på denna kommunikationsmodell mellan domänlogik och presentation. FileCollection ReadFileAction SaveToDatabasePanel SaveFileList Update ReadFromFilePanel Domänlogik Presentation

19 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License SwingWorker - bakgrundsprocess Undvik att krävande operationer fryser grafiken introducera trådar (eng thread) som kör separat process climate.ui.SwingWorker skapar en tråd SaveToDatabaseWorker ärver av SwingWorker måste implementera construct()-metoden trådar startas med med metoden start() SaveToDatabaseAction ska starta SaveToDatabaseWorker Swing körs i sin egen tråd (“the Swing thread”) SwingUtilities: invokeAndWait och invokeLater

20 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Sekvensdiagram för “Spara”: från presentation till databas SaveToDb Action SaveToDb Worker FileCollection Database Service saveBut: JButton action Performed start saveTo Database updateObs... new SwingWorker-tråden Swing-tråden updateObs Connection execute Update -”-... saveProgress......

21 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Spara i omgångar och ProgressBar Observer/Observable: ui-lagret lyssnar även inåt mot domain – då använder vi java.util.Observer Se paketet climate.ui.update FileCollection markerar hur långt man kommit setSaveProgressMax: sätter hur lång nuvarande fil är setSaveProgress: sätter hur många obs som sparats I MetaData finns en metod getDatabaseBatchSize anger antal observationer som ska sparas åt gången. Vid varje progressionsmarkering anropas alla Observer-objekt för FileCollection SaveProgressUpdate lyssnar efter progressions-händelser Progressions-grafiken nollställs för varje sparad fil

22 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License “Spara”: från databas till presentation FileCollection update SaveProgress Update display(true) update... JProgressBar setMaximum FileCollection getStringProp setValue... getStringProp SwingWorker-tråden Swing-tråden

23 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License DatabaseService: Data Mapper i CliMate Kopplar domänobjekt och databasrepresentation Objektorienterad modell till relationsmodell - “O/R bridge” Tre publika metoder i DatabaseService saveObservations: sparar ner ett segment ur en observationsfil registerInFileCollection: registrerar vilken observationssamling som just sparats (labb 2) selectObservations: gör en selektion baserat på givna sökkriterier (labb 3)

24 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License UpdateStatement: CliMates update-object-klass Skapa en speciell klass/metoder som bygger upp en databas-uppdatering (insert, delete, replace etc) UpdateStatement: objekt som utifrån ett eller flera ValueSet tilldelar query = “REPLACE INTO ” + table + “ VALUES “ addValueSet: lägger till värden efter VALUES execute: skickar värdet på query till databasen

25 Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Summering Tre-lager-arkitektur: olika uppgifter i olika lager Labb 2, del 1: arbeta med swing-grafik och uppdatering via Observable/Observer Domänlogik och presentation arbetar ihop via MVC lyssnare åt två håll: på användaren och på systemet I CliMate: action och update Labb 2, del 2: JDBC/SQL enbart i databaslagret Separat tråd för tung beräkning DataMapper och Update Object


Ladda ner ppt "Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License CliMate: Laboration 2 - domänlogik Human Centered Systems Inst. för datavetenskap Linköpings."

Liknande presentationer


Google-annonser