Sto scrivendo il mio framework MVC in PHP, solo per scopi di apprendimento. Non è stato davvero difficile avere una classe router/dispatcher per chiamare il controller/azione giusto, ecc.Un BaseModel in PHP MVC, buono o cattivo?
Ma ora sono nella parte in cui userò i modelli. O in realtà, il livello del modello. Ma c'è qualcosa che mi confonde.
Un sacco di altri framework MVC ha un 'BaseModel'. Ho letto che questo è in realtà una cattiva pratica, perché il "Modello" non dovrebbe essere visto come un'altra classe. Ma come un vero 'strato', che può contenere cose come il pattern 'mapper' o il pattern 'repository' ecc.
Ma a dire il vero, non vedo alcun vantaggio in questo. Per me, una classe 'BaseModel' sembra essere il modo più veloce per andare, con gli stessi risultati.
posso semplicemente fare qualcosa di simile:
class User extends BaseModel
{
// the GetUserBy* could easily be something that's handled by the
// BaseModel class, like in the Repo pattern.
public function getUserByName ($name)
{
// no error handling of any kind, just for simplicity
return $this->db->exec("SELECT * FROM users WHERE name='".$name."'");
}
// $data = array
public function saveUser ($data)
{
// Make sure no extra fields are added to the array
$user = array ('name' => $data['name'],
'address' => $data['address']);
$this->db->autoSave ($user);
}
}
Ma se mi piacerebbe andare per un modello di repository poi devo creare i seguenti: Repositories Enti DAO
Entità hanno Aggregati alla altri repository. Quindi in pratica sto scrivendo manualmente tutto il mio schema di database sugli oggetti ...
Alla fine, qual è la differenza ??? Tranne che probabilmente avrei potuto risparmiare un sacco di tempo semplicemente usando una classe BaseModel ...
Ma perché è ancora considerata una cosa negativa allora ?? Non è che il modello di pronti contro termine disaccoppia la mia applicazione più di quanto sto facendo ora. Perché per me, quei modelli di cui sopra sembrano essere molto sopravvalutati. Probabilmente funzionerebbe solo in un'applicazione che ha uno stato condiviso; Salva gli oggetti localmente (nel repository) e li impegni in seguito.
è per questo che penso che nessuno può realmente rispondere a questa ...
ma sto ancora sperando di vedere una risposta decente che mi fa andare: "ahhhh ... cosa stavo pensando .... ". Ma se no, allora sono sicuro del mio caso che il BaseModel non è affatto un male e che la maggior parte dei blogger sono solo un gruppo di pecore :-)
sembra carino [Propel] (http://www.propelorm.org/) -ish – Alp
Puoi darci un link a uno di questi post del blog? – webbiedave
@Alp l'esempio di codice? Propel è solo un ORM, non sto andando in quella direzione, perché mi piace scrivere query personalmente. Non mi riferisco agli ORM. Ma preferisco non usarli neanche. Un po 'di magia è ok, ma non troppo. Ma questa è tutta un'altra storia. – Vivendi