abstract data layer

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jasper DS

Jasper DS

15/02/2013 15:41:27
Quote Anchor link
Hoi iedereen,

we zijn weer enkele topics verder en ik ben opnieuw mijn hoofd aan het breken over de Storage classen (zie vorige topics). Ik kwam tot de conclusie dat, hoe ik mijn storage momenteel opbouw, veel te omslachtig is.

Ik zocht dus een oplossing en zag de querybuilder van Doctrine dus ik dacht hé leuk hier kan ik wat mee. Dan was ik verder aan het denken en dan kwam ik tot de conclusie dat ik met doctrine alleen databases kan uitlezen via pdo (verbeter me als ik fout ben). Buiten de querybuilder niet veel voordeel tegenover wat ik nu heb dus ik dacht dit kan beter.

Ik begon aan een soort StorageBuilder. Die bevat ongeveer dezelfde properties als de Doctrine querybuilder maar deze genereert GEEN sql. Wat wil in nu net doen? Het storageBuilder object meegeven aan mijn Storage classe.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$sb
= new StorageBuilder();
$sb->setfields(array('id', 'name'));
$sb->setFrom('users');
$sb->setWhere(array('id' => '1', 'name' => 'Japser'));

$this->getStorage($sb);
?>


Cool, nu kan ik in elke storage classe alles ophalen via $sb->getFields(), $sbGetFrom() etc. From kan een db-tabel zijn maar evengoed een .yml of een .json. In princiepe zou ik met de eigenschappen van de storagebuilder overal moeten aangeraken.

Dan kwam ik op het volgende probleem, er bestaat zoiets als KOPPELTABELLEN. SQL kent iets dat een JOIN noemt, het probleem is no-sql storages kennen dat niet dus ik weet niet hoe ik de interactie tussen 2 tabellen / 2 bestanden moet koppelen.

Ik zou kunnen zeggen dat er eerst moet opgehaald worden uit tabel / bestand één en dan met de key uit die tabel + bestand gaan zoeken in de andere tabel / bestand.

Hoe los ik dit het beste op?
Bedankt voor het lezen!
Jasper
Gewijzigd op 15/02/2013 15:42:16 door Jasper DS
 
PHP hulp

PHP hulp

20/04/2024 04:34:16
 
Reshad F

Reshad F

15/02/2013 20:45:00
Quote Anchor link
Misschien heb ik het helemaal verkeerd nu, maar moet je dan niet bijv een databaseStorageBuilder, JsonStorageBuilder etc hebben? Je zou volgens mij een interface kunnen maken die de benodigde methodes "aankaart" en deze implementeren in alle builders.?
 
Jasper DS

Jasper DS

15/02/2013 20:50:55
Quote Anchor link
Nee mijn "mapper" (waar de builder staat) is onafhankelijk van de storage. Het "builder" object (slechte naam) word meegeven aan een storage classe (PDO, Mysql, Json, XML, ...) die dan het object kan uitlezen en zijn storage specifieke ding kan doen zoals bijvoorbeeld een query maken.
 
- Raoul -

- Raoul -

15/02/2013 21:55:46
Quote Anchor link
Ik zou de naam dan 'StorageCriteria' ofzo geven. Want je haalt dingen op uit een storage die aan bepaalde criteria moeten voldoen. Want van een 'builder' ga je er van uit dat het een storage object aanmaakt.
Gewijzigd op 15/02/2013 21:57:23 door - Raoul -
 
Jasper DS

Jasper DS

15/02/2013 22:17:02
Quote Anchor link
Oke bedankt voor de tip maar hebben jullie ook een oplossing voor het join probleem tussen een SQL storage en een NO-sql storage?
 
- Raoul -

- Raoul -

15/02/2013 22:44:03
Quote Anchor link
Een storage interface maken en dan een SqlStorage of NoSqlStorage class die de Storage interface implementeert.
 
Local Dev

Local Dev

15/02/2013 22:45:32
Quote Anchor link
Of gebruik traits inplaats van een interface..
Gewijzigd op 15/02/2013 22:46:13 door Local Dev
 
Jasper DS

Jasper DS

15/02/2013 22:59:01
Quote Anchor link
- Raoul - op 15/02/2013 22:44:03:
Een storage interface maken en dan een SqlStorage of NoSqlStorage class die de Storage interface implementeert.


Dat is allemaal het probleem niet "simpele" query's zijn geen probleem. Het gaat mij over het join probleem. Hoe kan ik dat overeen laten komen tussen een sql en een nosql database?
 
Local Dev

Local Dev

15/02/2013 23:10:15
Quote Anchor link
Kijk eens naar de hydrator implementatie van zf2

Verder zou ik doen wat Raoul zegt, gebruik maken van een interface, en voor ieder type storage een database abstraction layer maken, of gebruik maken van Doctrine of Propel

Tegen welk probleem loop je aan met een join, kan je code laten zien?
Gewijzigd op 15/02/2013 23:12:30 door Local Dev
 
- Raoul -

- Raoul -

15/02/2013 23:11:42
Quote Anchor link
Gewoon gebruik maken van Doctrine lijkt me inderdaad ook een goede oplossing.
 
Reshad F

Reshad F

15/02/2013 23:19:19
Quote Anchor link
Je wilt toch niet met 1 enkele methode alles ophalen?
 
Jasper DS

Jasper DS

15/02/2013 23:20:16
Quote Anchor link
Zoals ik in mijn inleiding post al had gezegd heb ik gekeken naar doctrine maar ondersteund doctrine ook no-sql? Ik zie doctrine alleen in combinatie met PDO. Klopt dat of ben ik mis?

@reshad, die "Storagebuilder" is en class die alle gegevens bevat die de storage classe (kan een pdoStorage, XMLStorage, ... zijn) nodig heeft om een query / fileloader op te stellen.
Gewijzigd op 15/02/2013 23:21:29 door Jasper DS
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.