1 / 34

Model-objecten en hun relaties in Ruby on Rails

Model-objecten en hun relaties in Ruby on Rails. Webprogrammeren, week 1. Vandaag. Domein model ontwerpen (UML) Op papier >> rapport Views ontwerpen Schetsjes Associaties realiseren in RoR Model objecten Database tabellen Views: een klikmodel. Lagen in een applicatie. Gebruiker.

jud
Download Presentation

Model-objecten en hun relaties in Ruby on Rails

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Model-objecten en hun relatiesin Ruby on Rails Webprogrammeren, week 1 Wolter Kaper - w.h.kaper@uva.nl

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

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

  4. Domein model bevat 1 1 1 Bedrijf 0..* 0..* heeft 1 0..3 1..* Team Werknemer Persoon 1..* 0..* Aandeelhouder is een Wolter Kaper - w.h.kaper@uva.nl

  5. 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 Wolter Kaper - w.h.kaper@uva.nl

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

  7. Lagen volgens MVC + ORM Gebruiker + browser URL View Controller actie Modelobject Databasetabel Wolter Kaper - w.h.kaper@uva.nl

  8. 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. Wolter Kaper - w.h.kaper@uva.nl

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

  10. Eén naar meer relatie A A B B 0..1 * 0..1 * Wolter Kaper - w.h.kaper@uva.nl

  11. primaire sleutel verwijzende sleutel “Een naar meer” relatie:in de database flatgebouw: references flatgebouws bewoners Wolter Kaper - w.h.kaper@uva.nl

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

  13. 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 Wolter Kaper - w.h.kaper@uva.nl

  14. Eén naar meer: schermontwerp Flatgebouwen Flatgebouw Adres Bouwjaar Bewoners new del edit del edit update Bewoner Naam Huisnummer Flatgebouw new del edit del edit Finkelstein  update Wolter Kaper - w.h.kaper@uva.nl

  15. Eén naar meer “bevat” (“contains”) A B 1 * Wolter Kaper - w.h.kaper@uva.nl

  16. primaire sleutel verwijzende sleutel “Een naar meer” “bevat” relatiein de database bedrijfs divisies Wolter Kaper - w.h.kaper@uva.nl

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

  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 params[…] bedrijfs_id id in divisies_controller Wolter Kaper - w.h.kaper@uva.nl

  19. “Meer naar meer” A B * * 1 1 * * A B A_B Wolter Kaper - w.h.kaper@uva.nl

  20. “Meer naar meer”: database boeks auteurs Wolter Kaper - w.h.kaper@uva.nl

  21. Oplossing: extra tabel boekauteurs Wolter Kaper - w.h.kaper@uva.nl

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

  23. 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 “Meer naar meer” relatie in de model klassen Class Boekauteur belongs_to :boek belongs_to :auteur … end Wolter Kaper - w.h.kaper@uva.nl

  24. “Is een” relatie Werknemer Persoon Aandeelhouder Wolter Kaper - w.h.kaper@uva.nl

  25. “is een” relatie – erfelijkheidin de database • Single Table Inheritance • Multiple Table Inheritance Wolter Kaper - w.h.kaper@uva.nl

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

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

  28. 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) Wolter Kaper - w.h.kaper@uva.nl

  29. Persoon naam Werknemer salaris Multiple Table Inheritance Modellen laag... • Aandeelhouder • kapitaal Database laag... • Aandeelhouder • id • naam • kapitaal • Werknemer • id • naam • salaris Wolter Kaper - w.h.kaper@uva.nl

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

  31. 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 Wolter Kaper - w.h.kaper@uva.nl

  32. Gegevenstypen Wolter Kaper - w.h.kaper@uva.nl

  33. 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 • is-een • http://staff.science.uva.nl/~kaper/webprog/handouts/IsEen.zip Wolter Kaper - w.h.kaper@uva.nl

  34. 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. Wolter Kaper - w.h.kaper@uva.nl

More Related