JeuWeb - Crée ton jeu par navigateur
Des bases de données objets ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Général (https://jeuweb.org/forumdisplay.php?fid=36)
+--- Forum : Blabla (https://jeuweb.org/forumdisplay.php?fid=42)
+--- Sujet : Des bases de données objets ? (/showthread.php?tid=55)



Des bases de données objets ? - Sephi-Chan - 13-05-2008

Salut à tous,

Depuis quelques temps, je me pose des questions. J'ai de plus en plus envie de stocker directement mes objets dans un champ de base de données (dans un format tels que la chaîne sérialisée ou JSON).

Comme MySQL et autres ne semblent pas très appropriée à ce genre de choses, j'ai cherché sur Google et ces recherches ne sont pas très fructueuse : les annuaires (genre LDAP) et quelques SGBD (genre db4o, NeoDatis, etc.).

Je pense que ce genre de stockage est amené à se développer puisque actuellement on essaye de les simuler avec de l'ORM.

Qu'en pensez-vous, que proposez-vous ?


Sephi-Chan


RE: Des bases de données objets ? - naholyr - 13-05-2008

Que les ORM sont bien plus adaptés Wink
Une base de données stocke des données dans des tables, et des relations entre ces tables. Elles sont optimisées pour ça.

Si tu stockes un objet sous forme sérialisée (quelle que soit cette sérialisation), comment vas-tu effectuer des recherches comme "tous les objets dont le prix est entre 200 et 300", ou encore "le métier le plus utilisé", ou bien "les seelies qui ont un nom qui commence par 'A'" ?

À la rigueur il y a des bases de données où tu peux stocker des champs XML et faire des requêtes XPath dessus (je sais qu'Oracle le fait, je crois que Postrgre le fait aussi), ça peut être une idée (la sérialisation XML des objets en PHP5 se fait assez facilement :

webmouse a écrit :hey ok i have found the answer myself Big Grin with my little info about php

ok i want to give you the codes
perhaps you like this...
Code PHP :
<?php 
class Serializer
{
private static
$Data;

private function
GetaArray($arrayValue)
{
foreach (
$arrayValue as $Member)
{
$this->SerializeClass($Member,get_class($Member));
}
}
public function
Serialize($ObjectInstance,$ClassName)
{
Serializer::$Data.="<Root>";
$this->SerializeClass($ObjectInstance,$ClassName);
Serializer::$Data.="</Root>";
return
Serializer::$Data;

}
public function
SerializeClass($ObjectInstance,$ClassName)
{

Serializer::$Data.="<".$ClassName.">";
$Class=new ReflectionClass($ClassName);
$ClassArray= ((array)$ObjectInstance);
$Properties=$Class->getProperties();
$i=0;
foreach (
$ClassArray as $ClassMember)
{
$prpName= $Properties[$i]->getName();
Serializer::$Data.="<".$prpName.">";
$prpType= gettype($ClassMember);

if (
$prpType=='object')
{
$serializerinstance= new Serializer();
$serializerinstance-
>
SerializeClass($ClassMember,get_class($ClassMember));

}
if (
$prpType=='array')
{
$this->GetaArray($ClassMember);
}
else
{
Serializer::$Data.=$ClassMember;
}
Serializer::$Data.="</".$prpName.">";
$i++;
}
Serializer::$Data.="</".$ClassName.">";
return
Serializer::$Data;
}

public function
WriteXmlFile($XmlData,$FilePath)
{
$Xml = simplexml_load_string($XmlData);
$Doc=new DOMDocument();
$Doc->loadXML($Xml->asXML());
$Doc->save($FilePath);
}
public function
DeserializeClass($FilePath)
{
$Xml=simplexml_load_file($FilePath);
return
$this->Deserialize($Xml);
}
public function
Deserialize($Root)
{
$result=null;
$counter=0;
foreach (
$Root as $member)
{
$instance = new ReflectionClass($member->getName());
$ins=$instance->newInstance();
foreach (
$member as $child)
{
$rp=$instance->getMethod("set_".$child->getName());
if (
count($child->children())==0)
{
$rp->invoke($ins,$child);
}
else
{
$rp->invoke($ins,$this->Deserialize($child->children()));
echo
$child;
}
}
if (
count($Root)==1) {
return
$ins;
}
else
{
$result[$counter]=$ins;
$counter++;
}
if (
$counter==count($Root)) {
return
$result;
}
}
}

}
----------------------------------------------------------------------------
and using
Code PHP :
<?php 
$myclassins
= new Serializer();
$Xml= $myclassins->Serialize($instance,'classname');
$thing->WriteXmlFile($Xml,'c:\ersin.xml');
$result=$myclassins->DeserializeClass('c:\ersin.xml');
and the result is your object, instance of your class...
thanks every body....
source


RE: Des bases de données objets ? - Sephi-Chan - 13-05-2008

C'est bien ça le problème, et c'est pour ça que je cherchais des bases de données qui sont prévues pour ça !?

Les ORMs, ça me fait peur. J'aimerai à la limite pouvoir y recourir sans passer par un quelconque framework, c'est possible ?


Sephi-Chan, qui s'étale trop ces derniers temps…


RE: Des bases de données objets ? - naholyr - 13-05-2008

Ben des librairies d'ORM ça se trouve en standalone : Propel, Doctrine, ezPDO (plus ou moins abandonné hélas), ou même si c'est pour un seul projet tu construis simplement tes classes de manière la plus complète possible Wink
Dans la méthode MVC le modèle n'est pas forcément basé sur une tierce librairie, tu peux le construire de bout en bout toi-même après tout.