De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

6-1-2010Wolter Kaper - Model-objecten en hun relaties in Ruby on Rails Webprogrammeren, week 1.

Verwante presentaties


Presentatie over: "6-1-2010Wolter Kaper - Model-objecten en hun relaties in Ruby on Rails Webprogrammeren, week 1."— Transcript van de presentatie:

1 6-1-2010Wolter Kaper - w.h.kaper@uva.nl1 Model-objecten en hun relaties in Ruby on Rails Webprogrammeren, week 1

2 Vandaag Domein model ontwerpen (UML)  Op papier >> rapport Views ontwerpen  Schetsjes Associaties realiseren in RoR  Model objecten  Database tabellen  Views: een klikmodel 6-1-2010Wolter Kaper - w.h.kaper@uva.nl2

3 6-1-2010Wolter Kaper - w.h.kaper@uva.nl3 Lagen in een applicatie User Interface Laag Domein Model, Modellen Laag Database Laag Gebruiker

4 6-1-2010Wolter Kaper - w.h.kaper@uva.nl4 Domein model Bedrijf WerknemerTeam 1 1 0..* 1..*0..31 0..* Aandeelhouder 1 1..* Persoon is een heeft bevat

5 6-1-2010Wolter Kaper - w.h.kaper@uva.nl5 Wat is een domein model? Ontwerp voor een set object klassen Overeenkomst met buitenwereld Relaties zijn aangegeven  “is een” relaties: erfelijkheid  “heeft” relaties  “bevat” relaties (existentie afhankelijk) Datavelden Methoden

6 6-1-2010Wolter Kaper - w.h.kaper@uva.nl6 Lagen in een applicatie User Interface Laag Domein Model, Modellen Laag Database Laag Gebruiker

7 6-1-2010Wolter Kaper - w.h.kaper@uva.nl7 Lagen volgens MVC + ORM Gebruiker + browser ViewController Model object URL actie Database tabel

8 6-1-2010Wolter Kaper - w.h.kaper@uva.nl8 Doel voor vrijdagmiddag: Domein model op papier:  Welke objectklassen, relaties ertussen,  Datavelden en methoden (hoeft niet compleet) Implementeren in Rails als “snel prototype”  Schermbeelden hangen zinnig samen met objecten,  Kliks brengen je van het ene naar het andere scherm,  Basisdingen – new, index, edit,… - werken.

9 6-1-2010Wolter Kaper - w.h.kaper@uva.nl9 Relaties en hoe je ze realiseert In Ruby on Rails

10 Eén naar meer relatie 6-1-2010Wolter Kaper - w.h.kaper@uva.nl10 AB 0..1 * AB *

11 6-1-2010Wolter Kaper - w.h.kaper@uva.nl11 “Een naar meer” relatie: in de database idadresbouwjaar 1Lodewijk laan 304- 450 1970 2Braambos 525-6301984 3Kennedy laan 251- 365 2001 idnaamhuis- nummer flatgebouw _id 1Jansen3051 2Pietersen3061 3Klaassen252NULL flatgebouwsbewoners primaire sleutelverwijzende sleutel flatgebouw: references

12 6-1-2010Wolter Kaper - w.h.kaper@uva.nl12 “Eén naar meer” relatie: in model klassen class Flatgebouw has_many :bewoners... end class Bewoner belongs_to :flatgebouw... end

13 6-1-2010Wolter Kaper - w.h.kaper@uva.nl13 Ruby on Rails ORM regels Elke tabel een “id” kolom (autonummering) Tabelnaam: engels meervoud van object klassenaam Verwijzende sleutel: objectklasse waarnaar wordt verwezen + “_id” In objectklassen: has_many, has_one, belongs_to

14 Eén naar meer: schermontwerp 6-1-2010Wolter Kaper - w.h.kaper@uva.nl14 Flatgebouwen editdel editdel new Flatgebouw Adres Bouwjaar Bewoners new editdel editdel update Bewoner Naam Huisnummer Flatgebouw Finkelstein  update

15 Eén naar meer “bevat” (“contains”) 6-1-2010Wolter Kaper - w.h.kaper@uva.nl15 AB 1 *

16 6-1-2010Wolter Kaper - w.h.kaper@uva.nl16 “Een naar meer” “bevat” relatie in de database idnaam 1Philips 2Shell 3Albert Heyn idnaambedrijf_id 1Gloeilampen1 2Electronica1 3Aardolieproducten2 bedrijfsdivisies primaire sleutelverwijzende sleutel

17 6-1-2010Wolter Kaper - w.h.kaper@uva.nl17 “Eén naar meer” “bevat” relatie in de model klassen class Bedrijf has_many :divisies, \ :dependent => :destroy... end class Divisie belongs_to :bedrijf... end

18 “Eén naar meer” “bevat” relatie: URL routering GET /bedrijfs/1 GET /divisies/2…. …óf: GET /bedrijfs/1/divisies/2 map.resources :bedrijfs map.resources :divisies …. …óf: map.resources :bedrijfs, :has_many=>:divisies 6-1-2010Wolter Kaper - w.h.kaper@uva.nl18 bedrijfs_ididparams[…]in divisies_controller

19 “Meer naar meer” 6-1-2010Wolter Kaper - w.h.kaper@uva.nl19 AB * * AB 1 * A_B * 1

20 6-1-2010Wolter Kaper - w.h.kaper@uva.nl20 “Meer naar meer”: database idtiteljaar 1Turks fruit1972 2Werkkleding1984 3Max Havelaar1880 4Proceedings of the 23th conference on fluorescence 2001 idachternaaminitialen 1WolkersJ. 2Douwes-DekkerE. 3JonesK. 4ButterworthL.F. boeksauteurs

21 6-1-2010Wolter Kaper - w.h.kaper@uva.nl21 Oplossing: extra tabel boek_idauteur_id 11 21 32 43 44 boekauteurs

22 6-1-2010Wolter Kaper - w.h.kaper@uva.nl22 “Meer naar meer” relatie in de model klassen class Boek has_many :boekauteurs has_many :auteurs, \ :through => :boekauteurs... end class Auteur has_many :boekauteurs has_many :boeks, \ :through => :boekauteurs... end Notitie: “\” dient om een statement te verdelen over meerdere regels. Wellicht heb je hem hier niet nodig! Class Boekauteur belongs_to :boek belongs_to :auteur … end

23 6-1-2010Wolter Kaper - w.h.kaper@uva.nl23 “Meer naar meer” relatie in de model klassen class Boek has_many :boeks_auteurs, \ :dependent => :destroy has_many :auteurs, \ :through => :boeks_auteurs... end class Auteur has_many :boeks_auteurs, \ :dependent => :destroy has_many :boeks, \ :through => :boeks_auteurs... end Class Boekauteur belongs_to :boek belongs_to :auteur … end

24 “Is een” relatie 6-1-2010Wolter Kaper - w.h.kaper@uva.nl24 Persoon Werknemer Aandeelhouder

25 6-1-2010Wolter Kaper - w.h.kaper@uva.nl25 “is een” relatie – erfelijkheid in de database Single Table Inheritance Multiple Table Inheritance

26 6-1-2010Wolter Kaper - w.h.kaper@uva.nl26 Single Table Inheritance Persoon naam Werknemer salaris Aandeelhouder kapitaal Modellen laag... Database laag... Persoons type naam salaris kapitaal

27 6-1-2010Wolter Kaper - w.h.kaper@uva.nl27 Single Table Inheritance class Persoon < ActiveRecord::Base... end class Werknemer < Persoon... end class Aandeelhouder < Persoon... end

28 6-1-2010Wolter Kaper - w.h.kaper@uva.nl28 Single table inheritance Subklassen worden in één tabel opgeslagen Tabel krijgt naam van de hoofdklasse (in meervoud) Kolom “type” geeft subklasse aan Veel cellen blijven leeg (null)

29 6-1-2010Wolter Kaper - w.h.kaper@uva.nl29 Multiple Table Inheritance Persoon naam Werknemer salaris Aandeelhouder kapitaal Modellen laag... Database laag... Werknemer id naam salaris Aandeelhouder id naam kapitaal

30 6-1-2010Wolter Kaper - w.h.kaper@uva.nl30 Multiple Table Inheritance class Persoon < ActiveRecord::Base self.abstract = true... end class Werknemer < Persoon... end class Aandeelhouder < Persoon... end

31 6-1-2010Wolter Kaper - w.h.kaper@uva.nl31 Single of Multiple Table? Single Als je met één query objecten van diverse subtypen wilt ophalen Als je de subtypen zonder onderscheid wilt kunnen behandelen Multiple Als de subtypen veel verschillende kolommen hebben

32 6-1-2010Wolter Kaper - w.h.kaper@uva.nl32 Gegevenstypen MySQL kolomtypenRails kolomtypenRuby variabelen TINYINT(1):booleanTrueclass / Falseclass DATE:dateDate DATETIME:datetimeTime DECIMAL:decimalBigDecimal / Integer FLOAT:floatFloat INT:integerFixnum VARCHAR(255):stringString TEXT:textString :references

33 6-1-2010Wolter Kaper - w.h.kaper@uva.nl33 Voorbeeldjes “snel prototype” één-naar-meer:  Blog tutorial – rails site – ken je al meer-naar-meer  http://staff.science.uva.nl/~kaper/webprog/handouts/MeerNaarMeer.zip http://staff.science.uva.nl/~kaper/webprog/handouts/MeerNaarMeer.zip is-een  http://staff.science.uva.nl/~kaper/webprog/handouts/IsEen.zip http://staff.science.uva.nl/~kaper/webprog/handouts/IsEen.zip

34 6-1-2010Wolter Kaper - w.h.kaper@uva.nl34 Doel voor vrijdagmiddag: Domein model op papier:  Welke objectklassen, relaties ertussen,  Datavelden en methoden (hoeft niet compleet) Implementeren in Rails als “snel prototype”  Schermbeelden hangen zinnig samen met objecten,  Kliks brengen je van het ene naar het andere scherm,  Basisdingen – new, index, edit,… - werken.


Download ppt "6-1-2010Wolter Kaper - Model-objecten en hun relaties in Ruby on Rails Webprogrammeren, week 1."

Verwante presentaties


Ads door Google