koblingen objekter mot database

30
Koblingen objekter mot database 1

Upload: rune-sundling

Post on 14-Jul-2015

490 views

Category:

Technology


1 download

TRANSCRIPT

Koblingen objekter mot database

1

Introduksjon

• Varighet: 1 time

• Opplegg

• Foredrag

• Diskusjon om hva jeg har glemt og dere er uenig med meg i

2

Objekter -> databaser

•Problemområdet:

• Hvordan håndtere koblingen mellom objekter og database

•Database

• Lagring

• Forhold gjennom fremmednøkler

•Objekter

• Interaksjon

• Forhold gjennom referanser

• Arv, polymorfismse

3

Alternativer

•Manuell SQL

•Stored procedures/Views

•Dataset (Table data gateway)

•Active Record

•OR-mapper, egenutviklet

•OR-mapper, kommersiell/open source

•Kodegenerering

4

Persistance Ignorance

•Graden av kobling mellom databasen og objektene

• Arve fra spesifikk baseklasse

• Instansiere via bestemt factory

• Bruke spesielle datatyper

• Implementere interface

• Ha spesifikke konstruktører

• Ha spesifikke felt

• Access modifiers

• Annet

5

Manuell SQL

- Skrive SQL i kildekoden.

- Brukes gjerne med Dataset eller enkel form for OR-mapping

- Fordeler

- Raskt å lage

- Ulemper

- Uhåndterlig

- Skrive mye kode

- Ingen indikasjon til DBA om hva som går mot databasen

- SQL-injection

- Query plan caching

6

Stored procedures / Views

- SP/Views som aksess til databasen.

- Brukes gjerne med Dataset eller enkel form for OR-mapping

- Fordeler

- Lettere å få oversikt over hva som går mot basen enn med manuell SQL. Fint for DBA

- Velkjent

- Batch, rapporter osv.

- Abstraksjonslag

- Ytelse

- Sikkerhet

- Tuning

7

Stored procedures / Views

- Ulemper

- Kan være tungvindt å måtte spesifisere opp alt

- Business logikk

- Bytte database

- Forandringsfiendtlig

- Feilmeldinger/Debugging

- (Testing)

8

Dataset (Table data gateway)

- Fordeler

- Rapid Application Development støtte

- Veldig raskt å få opp

- Støtte igjennom hele rammeverket

- ”Microsoft-produkt”. Lett å få kunden med på

- Raskt å komme i gang med, alle kjenner det

9

Dataset (Table data gateway)

- Ulemper

- Skalerer veldig dårlig med kompleksitet

- Må leve med utility-klasser for funksjonalitet, ender fort opp med mye prosedurell kode

- Database-skjemaet lekker ned i hele systemet, ofte helt opp til GUI-bindinga

- Objektorientering

- Alt må castes (Blir lagret som object)

- Streng-basert spesifisering av kolonnenavn, både i uthenting til dataset, og i aksess mot datasettet

- Refaktorering kan være vanskelig

- Ofte også SQL i hele systemet, vanskeliggjør forandringer

10

Active Record

- Rad-objekt (entitet)

- med domenelogikk

- med kunnskap om egen lagring

- 1:1 mot databasetabell

11

Active Record

12

Active Record

- Fordeler

- Lav terskel

- Ikke duplisert mapping som ved standard OR-mapper

- Mapping mot database i objektet. Oversiktlig

- Sentralisert kobling mot databasen i et lag

- Jobber alltid med entiteter. Automagiske spørringer mot basen

- Automatisert refaktorering til vanlig OR-mapping.

- Ulemper

- Fungerer godt med ukomplisert skjema (1:1)

- Data-centric

- Vanskelig for DBA med spørrings-tuning

- PI, Testing

13

OR-mapper• Automatisk mapping mellom database og objekter

• Bruker mapping-filer eller attributter

• Persistence Ignorance (PI)

14

OR-mapper

•Fordeler

• Modellert domene godt – domain-centric

• Dynamisk SQL-generering

• Støtte for multiple-databaser

• Støtte for stored procedures og manuell sql

• Rask utviklingstid når det er oppe, lett å forandre

•Ulemper

• Kompleksitet

• Ytelse

15

OR-mapper, med mappingfiler

- Fordeler

- Separert objekt-design

- Støtter mer avanserte scenarioer enn Active Record

- Sentralisert kobling mot databasen i et lag

- Jobber alltid med entiteter. Selve mappingen mot databasen er automagisk

- Ulemper

- Må duplisere objektnavn, propertynavn osv. i mappingfiler

- XML og ren tekst (Hjelper med GUI-støtte, andre hjelpemidler)

- Vanskelig for DBA med spørrings-tuning

16

OR-mapper

•Lage egen

•Bruke kommersiell/open source

17

OR-mapper, egenlaget

- Fordeler

- Egen funksjonalitet / videreutvikling

- Debugging

- Kunden vet at alt som påvirker løsningen er internt

- Kult for den som gjør det

- Ulemper

- Tar mye tid

- Finne opp kruttet på nytt

- Ingen nye vil ha kunnskap om løsningen

- Ingen gratis videreutvikling / testing

18

OR-mapper, komm./open source

- Fordeler

- Relativt kort oppstartstid

- Installasjon og forståelse

- Avansert funksjonalitet

- Testet i (forhåpentligvis) utallige prosjekter og scenarioer

- Gratis videreutvikling og feilfiksing

- Nye kan potensielt kjenne løsningen

- Brukergruppe med kunnskap rundt bruk

19

OR-mapper, komm./open source

- Ulemper

- Tar mye tid

- Ikke debugge ved feil

- Begrenset av produktets grenser

- Lærekurve

- Ikke-Microsoft kan være problematisk å overbevise kunde om

- Hva om produktet slutter å utvikles?

20

Kodegenerering

•Generere data access og domeneobjekter fra databasen

•Kjenner det ikke godt nok

•Fordeler

• Nært til databasen

• Avansert generering

•Ulemper

• Data-centric

• Mange av de samme som OR-mapper ifh. til kompleksitet/ytelse osv.

21

Faktiske OR-alternativer

•NHibernate

•Enitity Framework

•LINQ to Sql

•Castle Active Record

22

NHibernate• Mest kjente og voksne

• Port fra Hibernate, levd i Java-verden i en evighet

• Stor brukerskare

• Domain-centric

• Mye funksjonalitet

• Mappingfiler

• Arv

• Eget query språk

• Støtte for Stored procedures

• 1-1, 1-*, *-*

• Caching

• Støtter flere databaser

• LINQ

• Persistance Ignorance (PI)

• ER OR-mapperen i .NET verden per nå

23

Entity Framework

•MSDN: ”designed to provide strongly typed LINQ access for applications requring a more flexible object-relational mapping, across Micorsoft SQL Server and third-party databases”

•Enterprise løsning

•Flere lag med metadata – Conceptual, Storage, Mapping

•Skal være mer enn en OR-mapper

•MEN

• Veldig dårlig i forhold til Persistence Ignorance

• Ikke veldig modent (v1)

24

LINQ to SQL

•Rapid Application Development løsning

•Støtter kun direkte mapping mot databasen. 1:1

•MSDN: ”designed to provide strongly typed LINQ access for rapidly developed applications across the Mircrosoft SQL Server family of databases.”

•Kun Table per Hierarchy arv

•Kun attributt-mapping ved bruk av Visual Studio 08 designer

•Kun SQL Server

25

Castle Active Record

•Fordeler

• Veldig enkelt å komme i gang med

• Laget over NHibernate

• Må ikke spesifisere kolonnenavn

•Ulemper

• Standard problemer rundt PI for AR

• Vanlig å arve fra baseklasse

• Data-centric

• 1:1

26

Sammenligning - PI

27

Sammenligning - Full

28

Konklusjon

• Ingen løsning passer alle scenarioer!

•Velg ut i fra

• Hva du skal utvikle

• Hvordan du liker å utvikle

• Hva du kan

• Hva de andre utviklerne kan!

29

Diskusjon & Spørsmål

•Hva har jeg glemt?

•Hva har jeg gjort feil?

30