login  Naam:   Wachtwoord: 
Registreer je!
 Forum

database + architectuur

Offline roy - 04/10/2010 18:56
Avatar van royPHP gevorderde Beste,

Ik heb de keuze uit twee (of misschien meerdere) manieren van aanpak. Welke is het beste/welke is het meest onderhoudbaar?

methode 1: het maken van classes + functies met daarin direct de connectie naar de database.

Methode 2: het maken van classes + functie + 1 extra class waarin alle functies naar de database staat. (nadeel kan zijn dat deze erg groot wordt)


Graag jullie advies/commentaar,
Thanks

11 antwoorden

Gesponsorde links
Offline Ricky - 04/10/2010 19:55
Avatar van Ricky PHP beginner Hangt van je plannen af. Ga je de databasestructuur vaak aanpassen, of is de databasestructuur eenmalig en vast?

Is dat laatste het geval, dan kun je gewoon methode 1 gebruiken. Die heeft ook altijd binnen eigen projecten mijn voorkeur gehad, omdat je bij ieder dingetje vaak net iets anders wilt met de database. Als je dan voor iedere manier een eigen functie/mogelijkheid moet creëren, lijkt me dat niet erg handig.

Als je de structuur makkelijk wilt kunnen aanpassen is methode 2 natuurlijk ideaal; je hoeft maar in één bestand de bende aan te passen. Nadeel is hier dan ook wel dat je andere script wel echt heel globaal moet zijn (anders levert een naamwisseling in de tabel al conflicten op)

Hangt dus een beetje van je systeem af, maar ik zou zeggen: methode 1.
Offline icemar - 04/10/2010 20:01
Avatar van icemar Lid Ik zou voor optie 2 gaan aangezien ik persoonlijk van het mvc hou en met oop programeren is dat het makkelijkste vindt ik.
Offline cloudstrife - 05/10/2010 16:29
Avatar van cloudstrife PHP beginner Methode 2 maar dan met wat ORM er bij. Bv een xml bestandje dat je class mapt op je table. In dat geval heb je een soort datehandler nodig die generiek is en voor alle klasses alle bewerkingen kan doen (de class kan dus niet heel groot worden maar is vast eenmaal je alle functionaliteit hebt voor zien), specifieke queries laat je dan gewoon uitvoeren en de result set map je dan naar je object.

Simpel en heel doeltreffend.
Offline roy - 05/10/2010 22:07
Avatar van roy PHP gevorderde is het dan gebruikelijk om in je "gewone" classes te extenden naar de database class?
want ik neem aan dat ik niet in elke functie een database-object aan hoef te maken.
Offline cloudstrife - 06/10/2010 07:57
Avatar van cloudstrife PHP beginner In mijn geval zijn dat gewoon statische functies in de datahandler. Gewoon een save, delete, load (voor een collectie) en loadObject (voor 1 object).
Offline roy - 06/10/2010 14:12 (laatste wijziging 06/10/2010 14:25)
Avatar van roy PHP gevorderde maar als je de query meegeeft als een parameter, dan leg je de afhankelijk nog in de andere classes.

Stel je gaat over naar een andere manier van data storage, dan moet je alle classes langs en wat veranderen, terwijl je anders alleen in de database class wat moet veranderen.


Mijn vraag was meer hoe ik de database functie moet benaderen... Door de database-class te extenden aan alle andere classes of door elke keer (als het nodig is) een database object te instantieren.

Offline cloudstrife - 06/10/2010 14:49
Avatar van cloudstrife PHP beginner Toch niet.

Je hebt een DataHandler die een statische functie save heeft. Bij de aanroep geeft je gewoon het object door. Dus DataHandler.save(object). Die DataHandler kijkt in een xml bestand en via reflection naar de naar welke propertie in welke kolom komt te staan en bouwt aan de hand daarvan een update-statement op en voert dit uit.

Stel dat je dan wijzigt van data-storage dan moet je voor al je classes slechts 1 aanpassing doen: de manier waarop je de gegevens bewaard. In een database is dit via update/insert maar het zou evengoed naar een excelbestand kunnen of naar xml.

Stel dat jij 1 groot script maakt met daarin per tabel een update/insert/select/delete statement dan moet je nog altijd heel wat gaan aanpassen als je bv 20 tabellen hebt. In mijn scenario moet je dan 4 zaken aanpassen + specifieke selects natuurlijk.
Offline roy - 06/10/2010 14:53
Avatar van roy PHP gevorderde ok buiten deze mooie methode die je voorsteld om....


Mijn vraag was meer hoe ik de database functie moet benaderen... Door de database-class te extenden aan alle andere classes of door elke keer (als het nodig is) een database object te instantieren.
Offline cloudstrife - 06/10/2010 15:14 (laatste wijziging 06/10/2010 15:14)
Avatar van cloudstrife PHP beginner Als je maar met 1 database werkt zou ik een singleton gebruiken en hiervan de instantie opvragen waar je communicatie met je database nodig hebt. Extenden zou ik niet doen.
Offline roy - 06/10/2010 16:23
Avatar van roy PHP gevorderde ok, dus een instantie maken en het $conn object eraan meegeven
Offline cloudstrife - 06/10/2010 18:13
Avatar van cloudstrife PHP beginner Nee niets meegeven. In je class voorzie je functies zoals save en delete. In die functies roep je de instantie van je db class aan, als je 1 db hebt kan dit bv met een singleton dan doe je gewoon DbHandler->getInstance() en boem je hebt je db object die de verwerking afhandeld van al je statements.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.167s