Last active
August 29, 2015 13:56
-
-
Save cotcotquedec/8846755 to your computer and use it in GitHub Desktop.
Structure de travail des mappers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Contient des données | |
* | |
* Ainsi que les methoide pour les serialiser etc.. | |
* | |
* /!\ Pas de lecture ni ecriture | |
* | |
*/ | |
class Store implements Serializable { | |
/** | |
* Contient un tableau associatif des filtres aec un nom de code OpenWengo | |
* | |
* ex | |
* ['champA'] => [ 'Alpha', | |
* ['Regex', '#^[a-f]{5}$$#']] | |
* | |
* @var unknown | |
*/ | |
protected $_filter; | |
/** | |
* Contient un tableau assciatif des validateur avec un nom de code OpenWengo | |
* | |
* | |
* ex : | |
* | |
* ['champA'] => [ 'Int', | |
* ['Beetween', 0, 10] | |
* ['RecordExist', 'table_A', 'Champs_1']] | |
* | |
* @var array | |
*/ | |
protected $_validator; | |
/** | |
* | |
* Factory depuis les données | |
* | |
* @param array $data | |
* @return Store | |
*/ | |
static function factory(array $data) { | |
} | |
/* (non-PHPdoc) | |
* @see Serializable::serialize() | |
*/ | |
public function serialize() { | |
// TODO Auto-generated method stub | |
} | |
/* (non-PHPdoc) | |
* @see Serializable::unserialize() | |
*/ | |
public function unserialize($serialized) { | |
// TODO Auto-generated method stub | |
} | |
} | |
/** | |
* Classe a étendre pour faire la compatitblité le system de donnée utilisé (Doctrine, Zend\Db, csv, MongoDB) | |
* | |
* | |
*/ | |
interface StoreAdapterInterface { | |
/** | |
* renvoie les données | |
* | |
* | |
* @param string $store Nom de la classe du store | |
* @param string $filter | |
* @param string $field | |
* | |
* @return array tableau de store | |
*/ | |
public function get($store, $filter = false) {} | |
/** | |
* | |
* Remplace un store (Delete - Insert) | |
* | |
* @param string $store Nom de la classe du store | |
* @param mixed $data (Store $data pour le OneToOne | array de Store pour oneToMany) | |
* @return MainStoreAdapter | |
*/ | |
public function set($store, $data) {} | |
/** | |
* | |
* Ajoute un ou plusieurs store sur le pool de store | |
* | |
* /!\ Uniquement valable pour OneToMany | |
* | |
* @param string $store Nom de la classe du store | |
* param mixed $data (Store $data | array de Store) | |
* @return MainStoreAdapter | |
*/ | |
public function add($store, $data) {} | |
/** | |
* | |
* Supprime un ou plusieurs store en fonction du filtre | |
* | |
* /!\ Uniquement valable pour OneToMany | |
* /!\ (utiliser clear pour le OneToOne) | |
* | |
* | |
* @param string $store Nom de la classe du store | |
* @param array|function $filter | |
* @return MainStoreAdapter | |
*/ | |
public function remove($store, $filter) {} | |
/** | |
* | |
* Supprime toutes les dependences | |
* | |
* | |
* @param string $store Nom de la classe du store | |
* @return MainStoreAdapter | |
*/ | |
public function clear($store) {} | |
/** | |
* | |
* Mise a jour des données (ne modifie pas les donnée non spécifié dans data UPDATE) | |
* | |
* @param string $store Nom de la classe du store | |
* @param array $data (sauf si on prend en compte la possibilité d'un store partiel avec les validatopr ou autre) | |
* @param array|function $filter | |
*/ | |
public function update($store, $data, $filter) {} | |
/** | |
* Methode magic pour distribuer les raccourcie | |
* | |
* ex get : | |
* getOneProfil() { | |
* $data = $this->get('Profil') | |
* return current $data->toArray() | |
* } | |
* | |
* | |
* ex : add | |
* $store = [new Store($a), new Store($b)] | |
* addProfil($store) { | |
* add('Profil', (array) $store) | |
* } | |
* | |
* @return mixed | |
*/ | |
public function __call() {} | |
} | |
/** | |
* | |
* Seule classe qui a la contrainte de son environement a recoder | |
* | |
*/ | |
class StoreAdapter implements StoreAdapterInterface { | |
/* (non-PHPdoc) | |
* @see StoreAdapterInterface::get() | |
*/ | |
public function get($store, $filter = false) { | |
// TODO Auto-generated method stub | |
} | |
/* (non-PHPdoc) | |
* @see StoreAdapterInterface::set() | |
*/ | |
public function set($store, $data) { | |
// TODO Auto-generated method stub | |
} | |
/* (non-PHPdoc) | |
* @see StoreAdapterInterface::add() | |
*/ | |
public function add($store, $data) { | |
// TODO Auto-generated method stub | |
} | |
/* (non-PHPdoc) | |
* @see StoreAdapterInterface::remove() | |
*/ | |
public function remove($store, $filter) { | |
// TODO Auto-generated method stub | |
} | |
/* (non-PHPdoc) | |
* @see StoreAdapterInterface::clear() | |
*/ | |
public function clear($store) { | |
// TODO Auto-generated method stub | |
} | |
/* (non-PHPdoc) | |
* @see StoreAdapterInterface::update() | |
*/ | |
public function update($store, $data, $filter) { | |
// TODO Auto-generated method stub | |
} | |
/* (non-PHPdoc) | |
* @see StoreAdapterInterface::__call() | |
*/ | |
public function __call() { | |
// TODO Auto-generated method stub | |
} | |
} | |
/** | |
* Contient le store d'entré dans le mapper ainsi que les relation avec les autre store | |
* | |
* | |
*/ | |
class MainStore extends Store { | |
/** | |
* contient les information de relation entre les Stores fils | |
* | |
* Cette config est lié aux adapter et donc differente en fonction du projet | |
* | |
* ["Store"] => [ 'adapter' => StoreAdapter | |
* 'type' => OneToMany | |
* 'store' => Store ] | |
* | |
* @var array | |
*/ | |
protected $_relation; | |
} | |
/** | |
* | |
* Le model utilisé par l'application | |
* | |
*/ | |
class Mapper { | |
/** | |
* Contient le store principale | |
* | |
* @var MainStore | |
*/ | |
protected $_mainstore; | |
/** | |
* On placerai donc ici toutes les méthodes souhaité pour l'objet | |
* | |
* exemple : | |
* - activate() | |
* - addProduct() | |
* | |
* Ce sont ces methode public qui compose le model | |
* | |
* | |
*/ | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment