JeuWeb - Crée ton jeu par navigateur

Version complète : Des bases de données objets ?
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
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
Que les ORM sont bien plus adaptés 16
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 1 with my little info about php

ok i want to give you the codes
perhaps you like this...
Code 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.">"
            
$prpTypegettype($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 :
$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
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…
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 16
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.
URLs de référence