Skip to content

Instantly share code, notes, and snippets.

@cotcotquedec
Last active August 29, 2015 13:56
Show Gist options
  • Save cotcotquedec/8846755 to your computer and use it in GitHub Desktop.
Save cotcotquedec/8846755 to your computer and use it in GitHub Desktop.
Structure de travail des mappers
<?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