RE: What is the best practice for adding persistence to an MVC model?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I take a  different  approach :


// In the  MainHandler

Define('StorageClassName',"_MySQL");

Class UserController {
	function __construct($objDataStore=false){
		if(!$objDataStore)
			$this->DataStore = new instanceof($this).STORAGECLASSNAME ;
	}
	Function update(){
		$data = $this->DataStore->Load("foo");
		$data->Set("foo","bar");
		$data->save;
	}


This assumes your using DBO  so the loaded foo object inherited the settings/methods from the DB Datastore.
Thus letting you  passing a different datastore object  or  it builds one based on the model name and the storage type you set as a constant.

However it still links the two together so you can use  $this calls to reference the DataStore of the Model layer.

David
> -----Original Message-----
> From: Mert Oztekin [mailto:moztekin@xxxxxxxxxxxxxxxxxxxxx]
> Sent: Tuesday, October 27, 2009 6:14 AM
> To: 'Eric Bauman'; php-general@xxxxxxxxxxxxx
> Subject: RE:  What is the best practice for adding persistence to an MVC
> model?
> 
> Hi Eric,
> 
> IMO, controllers shouldnt be responsible for interacting models and
> datastoreres. Controllers might only change the datastore class of a model.
> 
> You may use your models in lots of controller functions. Defining datastore in
> all controllers seems not a good practice. (too much unneccessary codes
> written)
> 
> A simple example
> 
> //controller
> Public function doItController()
> {
>         $user = new user();
>         // $user->setDataStorer(new anotherDataStorer());   // this is optional if
> you want to change models datastorer
>         $user->loadUserFromId(1);
> }
> 
> // model
> Class user
> {
>         Protected $_dataStorer = null;
> 
>         Public function loadUserFromId($id = 0)
>         {
>                 // codes codes codes
>                 $result =       $this->getDataStorer()->query("select .....");
>                 // codes codes codes
>         }
> 
>         // codes codes codes
>         Public function getDataStorer()
>         {
>                 if(null == $this->_dataStorer)
>                         $this->_dataStorer = new myVeryBestDataStorer();
>                 return $this->_dataStorer;
>         }
> 
>         Public function setDataStorer($newStorer)
>         {
>                 $this->_dataStorer = $newStorer;
>         }
> }
> 
> 
> Hope it will be usefull and understandable
> 
> -----Original Message-----
> From: Eric Bauman [mailto:baumane@xxxxxxxxxxxxxx]
> Sent: Tuesday, October 27, 2009 8:27 AM
> To: php-general@xxxxxxxxxxxxx
> Subject:  What is the best practice for adding persistence to an MVC
> model?
> 
> I'm in the process of implementing an ultra-light MVC framework in PHP.
> It seems to be a common opinion that the loading of data from a database,
> file etc. should be independent of the Model, and I agree.
> What I'm unsure of is the best way to link this "data layer" into MVC.
> 
> I've considered a few options:
> 
> *Datastore interacts with Model*
> 
> //controller
> public function update()
> {
> 
>   $model = $this->loadModel('foo');
>   $data = $this->loadDataStore('foo', $model);
> 
>   $data->loadBar(9); //loads data and populates Model
>   $model->setBar('bar');
>   $data->save(); //reads data from Model and saves
> 
> }
> 
> *Controller mediates between Model and Datastore*
> 
> Seems a bit verbose and requires the model to know that a datastore exists.
> 
> //controller
> public function update()
> {
> 
>   $model = $this->loadModel('foo');
>   $data = $this->loadDataStore('foo');
> 
>   $model->setDataStore($data);
> 
>   $model->getDataStore->loadBar(9); //loads data and populates Model
>   $model->setBar('bar');
>   $model->getDataStore->save(); //reads data from Model and saves
> 
> }
> 
> *Datastore extends Model*
> 
> What happens if we want to save a Model extending a database datastore to
> a flatfile datastore?
> 
> //controller
> public function update()
> {
> 
>   $model = $this->loadHybrid('foo'); //get_class == Datastore_Database
> 
>   $model->loadBar(9); //loads data and populates
>   $model->setBar('bar');
>   $model->save(); //saves
> 
> }
> 
> *Model extends datastore*
> 
> This allows for Model portability, but it seems wrong to extend like this.
> Further, the datastore cannot make use of any of the Model's methods.
> 
> //controller extends model
> public function update()
> {
> 
>   $model = $this->loadHybrid('foo');  //get_class == Model
> 
>   $model->loadBar(9); //loads data and populates
>   $model->setBar('bar');
>   $model->save(); //saves
> 
> }
> 
> 
> 
> Any input on the "best" option - or alternative - would be most appreciated.
> 
> --
> PHP General Mailing List (http://www.php.net/) To unsubscribe, visit:
> http://www.php.net/unsub.php
> 
> 
> Bu mesaj ve ekleri, mesajda gönderildiği belirtilen kişi/kişilere özeldir ve
> gizlidir. Size yanlışlıkla ulaşmışsa lütfen gönderen kisiyi bilgilendiriniz ve mesajı
> sisteminizden siliniz. Mesaj ve eklerinin içeriği ile ilgili olarak şirketimizin
> herhangi bir hukuki sorumluluğu bulunmamaktadır. Şirketimiz mesajın ve
> bilgilerinin size değişikliğe uğrayarak veya geç ulaşmasından, bütünlüğünün
> ve gizliliğinin korunamamasından, virüs içermesinden ve bilgisayar sisteminize
> verebileceği herhangi bir zarardan sorumlu tutulamaz.
> 
> This message and attachments are confidential and intended for the
> individual(s) stated in this message. If you received this message in error,
> please immediately notify the sender and delete it from your system. Our
> company has no legal responsibility for the contents of the message and its
> attachments. Our company shall have no liability for any changes or late
> receiving, loss of integrity and confidentiality, viruses and any damages
> caused in anyway to your computer system.
No virus found in this outgoing message.
Checked by AVG - www.avg.com
Version: 8.5.423 / Virus Database: 270.14.34/2462 - Release Date: 10/27/09 07:38:00
-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux